我有一个没有 $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/

10-11 23:35