我有一个没有$scope
angular.module('todoApp', [])
.controller('TodoListController', function() {
var todoList = this;
todoList.title = "Default title";
setTimeout(function() {
todoList.title = "Another title will appear after 5 seconds";
}, 5000);
// ...some magic here
});
并查看:
<h1>Current title: {{TodoListController.title}}</h1>
此代码无法正常运行,因此setTimeout
中的函数将无法运行$digest()
,而TodoListController.title
可以更新$scope
。
我知道我可以使用$scope.$digest()
并使用$digest()
。但是 - 没有它可以运行angular
吗?我总是访问对象.push
。也许通过这个对象?
答案 0 :(得分:2)
您应该使用$timeout
而不是vanilla setTimeout。
angular.module('todoApp', [])
.controller('TodoListController', function($timeout) {
var todoList = this;
todoList.title = "Default title";
$timeout(function() {
todoList.title = "Another title will appear after 5 seconds";
}, 5000);
// ...some magic here
});
从angular使用$timeout
将处理开始的摘要周期。
如果您想通知angular进行更新而不延迟,Angulars $ timeout也很有用。在这种情况下,您可以在没有第二个参数的情况下调用它。
$timeout(function(){
//something outside angular ...
});
传递给$timeout
的函数将在下一个摘要周期调用。
这种方式比手动调用$ digest更好,因为它可以防止digest already in progress
错误。
答案 1 :(得分:0)