当我开始阅读 $digest 和 $apply 时,我清楚地理解了两者。
但是当我开始探索 $apply 时,我写了下面的代码
$scope.$apply(function(){
$scope.isLoggedIn = true;
});
在 $scope.$apply 功能中传递函数参数需要什么?任何方法 $scope.$apply 都会调用 $rootscope.$digest ,它会触发所有观察者,并且值将更新到 View 。那么为什么我们要在 $apply 函数中传递函数参数。
最佳答案
假设您已经知道 when to use $scope.$apply
,看看 $apply
docs 中的伪代码:
function $apply(expr) {
try {
return $eval(expr);
} catch (e) {
$exceptionHandler(e);
} finally {
$root.$digest();
}
}
如果您将函数传递给 $apply
,那么它会简单地转发到 $eval
.
eval 的文档表明我们可以传递字符串或函数。
string
: execute using the rules as defined in expression.function(scope)
: execute the function with the current scope parameter.
就您而言,您正在传递一个函数。该函数仅使用当前作用域作为第一个参数进行评估。
$scope.$apply(function(scope) {
scope === $scope;
});
因此,简而言之:可以使用函数参数调用 $apply
,该函数参数将在作用域摘要开始之前安全地求值。
关于javascript - 为什么我们将函数参数传递给 $scope.$apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33798337/