在AngularJS中,不同形式的范围。$ apply会做什么?

时间:2013-10-05 10:48:16

标签: angularjs

方法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的函数中进行范围修改。

有什么区别,什么时候应该使用哪个?

1 个答案:

答案 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()来更新绑定。