Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AngularJS中,$apply的不同形式的作用域是什么?_Angularjs - Fatal编程技术网

在AngularJS中,$apply的不同形式的作用域是什么?

在AngularJS中,$apply的不同形式的作用域是什么?,angularjs,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的各种形式,也不理解为什么您可以在没有参数的情况下调用它,

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


<> P>有什么区别,什么时候应该使用?

< P>以更好地理解差异,请考虑下面的伪代码,从角度文档


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

Oh OK。所以,只要有任何错误通过$exceptionHandler报告,它就不会对消化的内容产生任何影响。我想这是有道理的。谢谢
function $apply(expr) {
  try {
    return $eval(expr);
  } catch (e) {
    $exceptionHandler(e);
  } finally {
    $root.$digest();
  }
}