取此代码:
$scope.$apply(function(){
$scope.foo = 'test';
});
相对于这个:
$scope.foo = 'test';
$scope.$apply();
那两个有什么区别呢?我试着搜索,但没有找到任何有关这方面的信息。
甚至这种方法:
$scope.$apply('foo = "test"');
发布于 2013-11-06 14:07:57
你在评论中引用的文章是正确的。唯一的区别是,如果传入一个函数,该函数将在$digest
循环的其余部分之前被“应用”(或$digest
ed)。因此,如果您想要从角度上立即识别特定的更改(即在对所有其他更改进行评估之前),则应该传递一个函数。否则,$scope.$apply()
和$rootScope.$digest()
没有区别。
这篇文章说:
$apply是什么?简单地说,它是$rootScope.$digest的包装器,它计算在调用$digest()之前传递给它的任何表达式。就这样。因此,如果您在不向其传递参数的情况下单独调用它,那么只需调用$digest()即可。
希望这能有所帮助。
发布于 2013-11-06 17:13:27
它很简单,考虑下面的例子
$scope.$apply(function(){
//lets say we write some conventional JS code like
//make an ajax call using $.ajax() of jquery
// the code runs in angular context and exception will be thrown if any error
});
何地as
$.ajax({
// in response update the $scope.foo = 400/0 ;
});
$scope.$apply();
//no exception will be thrown by angular, because its unaware of what you do outside its context
发布于 2016-03-07 15:54:12
我不相信被接受的答案是正确的。当AngularJS“消化”时,它会检查自上次调用$digest()
以来在作用域中发生的任何更改。
在$apply()
的情况下,$digest()
在$rootScope
上被调用,因此在所有子作用域中被调用。
使用函数体中的代码调用$apply(function() {})
与在代码后调用$apply()
之间唯一的区别是异常处理。
如果将代码作为函数体的一部分传递给$apply()
并引发异常,则该异常将由$exceptionHandler
处理。否则,你将不得不自己处理这个例外。
$digest()怎么办?
如果不提及$apply()
,对$digest()
的讨论是不完整的。在大多数情况下,$digest()
比调用$apply()
更有效,原因是$digest()
只处理当前作用域,而$apply()
处理每个作用域。
因此,如果您只需要更新您的范围,那么调用$digest()
就更有效了。
也就是说,当您使用$digest()
时,您必须自己处理所有异常。与$apply()
不同,$digest()
不做任何异常处理。
https://stackoverflow.com/questions/19813981
复制相似问题