0
我刚刚登上一个新的项目,我看到的角的js代码这个模式很多:使用超时和范围应用 - angularjs
_.defer(function() {
$scope.$apply();
});
这似乎是我错了,但我不确定为什么。什么是可能的原因,你会等待角度插值完成,然后再调用$ scope。$ apply()?
我刚刚登上一个新的项目,我看到的角的js代码这个模式很多:使用超时和范围应用 - angularjs
_.defer(function() {
$scope.$apply();
});
这似乎是我错了,但我不确定为什么。什么是可能的原因,你会等待角度插值完成,然后再调用$ scope。$ apply()?
$apply()
电话$digest()
引擎盖下,$摘要棱角分明的内部循环,以检查是否有绑定的数据已经改变。 大多数情况下,您不需要打电话给自己,因为AngularJS会照顾到这一点。
您需要调用$ apply的唯一情况是当您使用外部库(例如,当您在指令中包装jquery库或者使用异步lib如facebook/twitter时)和angular不可能知道关于DOM的变化。
在这些情况下,您可以将代码包装在$timeout
之内。这只是一个安全的方式角度调用$应用时,其准备好,而不是冒着错误'$digest already in progress error'
是你直接调用$应用。
$timeout (function() {
$scope.update = "something has changed";
});
这种方式更多的是原生的角度方式,而不是使用下划线库。
有关详细解释,您可以查看this article(有点古老但角度保持不变的核心原则相同)。
可能是为了避免错误“摘要已在进行中”。当Angular正在“消化”数据时,可以改变一个变量。所以也许这种改变不能被角度检测到,所以需要“$ apply”。我的2cents – AlainIb