方法1
scope.tasks.pop(task);
scope.$apply();
方法2
scope.$apply(scope.tasks.pop(task));
方法3
scope.$apply(function()
{
scope.tasks.pop(task);
});
我的结果在每种情况下都是相同的。我理解当修改范围超出“普通”角度时,必须调用$apply
才能在数据绑定中拾取更改。但是我不理解$ apply的各种形式以及为什么你可以在没有参数的情况下调用它而不是在传递给$ apply的函数中进行范围修改。
有什么区别,什么时候应该使用哪个?
答案 0 :(得分:3)
为了更好地理解差异,请从角度文档http://docs.angularjs.org/api/ng.$rootScope.Scope
中考虑$ apply函数的以下伪代码function $apply(expr) {
try {
return $eval(expr);
} catch (e) {
$exceptionHandler(e);
} finally {
$root.$digest();
}
}
当您使用函数或表达式字符串作为参数调用它时,angular可以正确处理从该函数抛出的错误并将它们转发到$ exceptionHandler服务。在任何情况下,它都会调用$ digest()来更新绑定。