3

方法一

scope.tasks.pop(task);
scope.$apply();

方法二

scope.$apply(scope.tasks.pop(task));

方法三

scope.$apply(function()
{
   scope.tasks.pop(task);
});

我的结果似乎在每种情况下都是一样的。我了解在“正常”角度之外修改范围时,您必须要求$apply在数据绑定中获取更改。但是我不明白 $apply 的各种形式,以及为什么你可以不带参数地调用它而不是在传递给 $apply 的函数中进行范围修改。

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

4

1 回答 1

3

为了更好地理解差异,请考虑角度文档http://docs.angularjs.org/api/ng.$ro​​otScope.Scope中 $apply 函数的以下伪代码

function $apply(expr) {
  try {
    return $eval(expr);
  } catch (e) {
    $exceptionHandler(e);
  } finally {
    $root.$digest();
  }
}

当您使用函数或表达式字符串作为参数调用它时,angular 可以正确处理从该函数抛出的错误并将它们转发给 $exceptionHandler 服务。在任何情况下,它都会在最后调用 $digest() 来更新绑定。

于 2013-10-05T12:00:07.940 回答