$ interval()可以改变模型和视图但是setInterval()不能?

时间:2016-01-26 07:26:02

标签: angularjs

如果我在控制器中有以下AngularJS代码:

$scope.s = "ha ha";

$interval(function() {
    $scope.s = "hmm ha ha " + new Date().getTime();
}, 1000);

然后它将改变模型,以及使双向绑定工作,所以在屏幕上,任何

{{ s }}

每秒都会显示一个新字符串。

但是在使用setInterval()之后...我使用了它并且它不会更新视图...我认为应该更改$scope.s,但为什么不更新视图$interval()会吗?

(如果是$timeout() vs setTimeout()则相同。)

1 个答案:

答案 0 :(得分:4)

因为在使用setInterval时,angular无法知道回调函数已被调用并更新了范围,因此它不知道它必须重新评估视图中的表达式并刷新DOM。

当使用$ interval(一个角度服务)时,angular知道何时调用回调函数,因此知道它必须在调用后重新评估表达式,因为范围可能已经改变。

您可以使用$scope.$apply()告诉angular您在setInterval回调函数中修改了范围。