当注入服务中的数据更新时,有没有办法刷新过滤器的输出?
我将UserPreferenceService注入过滤器以修改输出 - 当UserPreferenceService的数据更新时,我想更新过滤器的输出。
目前,UserPreferenceService的数据仅影响初始加载时过滤器的输出,或者在模板中更改输入并重新应用过滤器时:
angular.module('myModule').filter('myFilter', function ($filter, UserPreferenceService) {
return function (input) {
var output;
if (UserPreferenceService.someOption === "foo") {
output = input + "bar";
} else {
output = input + "baz";
}
return output;
}
});
答案 0 :(得分:2)
如果在partial(html)中调用过滤器,将使用EACH摘要过程再次调用过滤器,因此您可以通过直接调用摘要来强制执行它,如果您在JS代码中使用过滤器会更复杂一点
您可以在过滤器所在的控制器范围内调用$scope.$digest()
,或者$scope.$apply()
将触发$rootScope.$digest
并消化所有范围
答案 1 :(得分:0)
我认为这里的问题是您以异步方式接收数据。当您以这种方式接收数据时,Angular没有意识到那里有新数据。您可以在成功回调中运行$scope.$apply()
。这将运行AngularJS的摘要周期,然后更新过滤器中的数据。