AngularJS,将更改应用于工厂的视图

时间:2016-02-11 13:07:13

标签: javascript angularjs

我尝试显示来自$ exceptionHandler factory的错误消息,生命周期为5秒。所以我有一个带有以下代码的视图

<div class="messages">
    <div class="message" ng-repeat="message in errors">
         {{message}}
    </div>
</div>

和工厂

services.factory('$exceptionHandler',function ($injector) {
    return function(exception, cause) {
        var $rootScope = $injector.get('$rootScope');
        $rootScope.errors = $rootScope.errors || [];
        $rootScope.errors.push(exception.message);
        setTimeout(function(){
            $rootScope.errors.splice(0,1);
        }, 5000);
    };
});

消息显示正常,但从数组中删除后,它们仍然存在于视图中。我想我需要用$ digest和$ apply做点什么,但我不明白什么。需要帮助!

1 个答案:

答案 0 :(得分:3)

当您使用角色setTimeout服务时,您正在使用$timeout

setTimeout有角度触发回调时,我们不知道它必须刷新html。如果您使用$timeout代替,那么它将知道在回调完成后rtun一个摘要循环并且您的页面应该正确更新。

您还可以从回调中明确触发摘要循环,有时您必须这样做,但是对于超时,只需使用提供的服务。