[AngularJS面面观] 4. scope中的$apply方法 - Digest Cycle的触
本文介绍scope对象中 当然,本文的重点还是在于该方法是如何实现的。下面言归正传,来看看相关源代码: $apply: function(expr) {
try {
beginPhase('$apply');
try {
return this.$eval(expr);
} finally {
clearPhase();
}
} catch (e) {
$exceptionHandler(e);
} finally {
try {
$rootScope.$digest();
} catch (e) {
$exceptionHandler(e);
throw e;
}
}
}
整体的流程其实很简单,实现代码也不过20行。 然后通过 让我们上面出现的几个新概念: 关于 function beginPhase(phase) {
if ($rootScope.$$phase) {
throw $rootScopeMinErr('inprog','{0} already in progress',$rootScope.$$phase);
}
$rootScope.$$phase = phase;
}
function clearPhase() {
$rootScope.$$phase = null;
}
因此在调用 那么下面的关键就是 $eval: function(expr,locals) {
return $parse(expr)(this,locals);
}
很明显, 那么我们通过Angular文档中的例子来直观地认识一下什么是Angular的表达式: var scope = ng.$rootScope.Scope();
scope.a = 1;
scope.b = 2;
expect(scope.$eval('a+b')).toEqual(3);
expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
从第一个例子中,我们可以知道它真的可以是一个表达式,就是一条语句: 所以,整个 scope对象除了我们耳熟能详的 感谢大家花费宝贵时间阅读我的文章,如果发现文中有不妥之处,请赐教!谢谢大家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |