如果我在控制器中有以下AngularJS代码:
$scope.s = "ha ha";
$interval(function() {
$scope.s = "hmm ha ha " + new Date().getTime();
}, 1000);
然后它将改变模型,以及使双向绑定工作,所以在屏幕上,任何
{{ s }}
每秒都会显示一个新字符串。
但是在使用setInterval()
之后...我使用了它并且它不会更新视图...我认为应该更改$scope.s
,但为什么不更新视图$interval()
会吗?
(如果是$timeout()
vs setTimeout()
则相同。)
答案 0 :(得分:4)
因为在使用setInterval时,angular无法知道回调函数已被调用并更新了范围,因此它不知道它必须重新评估视图中的表达式并刷新DOM。
当使用$ interval(一个角度服务)时,angular知道何时调用回调函数,因此知道它必须在调用后重新评估表达式,因为范围可能已经改变。
您可以使用$scope.$apply()
告诉angular您在setInterval回调函数中修改了范围。