我有一个没有 $scope
的 Controller
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
中的 Becaufe 函数不会运行 $digest()
,它可以更新我的 TodoListController.title
。我知道我可以使用
$scope
并使用 $scope.$digest()
。但是 - 没有它可以运行 $digest()
吗?我总是可以访问对象 angular
。也许通过这个对象? 最佳答案
您应该使用 $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
错误。关于javascript - Angular - 在没有 `$digest` 的情况下运行 `$scope`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40269011/