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

Javascript AngularJS,从工厂将更改应用于视图,javascript,angularjs,Javascript,Angularjs,我尝试显示来自$exceptionHandler工厂的错误消息,使用寿命为5秒。因此,我有一个具有以下代码的视图 <div class="messages"> <div class="message" ng-repeat="message in errors"> {{message}} </div> </div> 这些消息显示得很好,但从阵列中删除它们后,它们仍然显示在视图中。我想我需要用$digest和$app

我尝试显示来自$exceptionHandler工厂的错误消息,使用寿命为5秒。因此,我有一个具有以下代码的视图

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

这些消息显示得很好,但从阵列中删除它们后,它们仍然显示在视图中。我想我需要用$digest和$apply做点什么,但我不明白是什么。需要帮助

当您应该使用angular的
$timeout
服务时,您正在使用
setTimeout

当回调由
setTimeout
angular触发时,angular不知道它必须刷新html。如果您改用
$timeout
,则它将知道在回调完成后RTU一个摘要循环,并且您的页面应该正确更新


您也可以从回调内部显式触发摘要循环,有时您必须这样做,但对于超时,只需使用提供的服务。

将任何作用域插入服务中是非常糟糕的做法:(谢谢你的建议!视情况而定,如果这是服务的目的,比如显示错误,我看不出有什么问题。一个更干净的解决方案是定义一个存储消息并使其过期的服务,并使用一个独立的控制器(绑定ng控制器)监视当前消息并显示它们,这就是我所拥有的:)我在使用factory时遇到了一个类似的问题(),但这与$timeout无关。请看一看,好吗?谢谢!@SauhardGupta,不明白为什么会这样。我已将其更改为$timeout。结果是:找到了循环依赖项:$rootScope@bbааааааааааааа1072;
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);
    };
});