注入服务更新后刷新AngularJS过滤器

时间:2015-03-12 17:06:30

标签: javascript angularjs

当注入服务中的数据更新时,有没有办法刷新过滤器的输出?

我将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;
    }

});

2 个答案:

答案 0 :(得分:2)

如果在partial(html)中调用过滤器,将使用EACH摘要过程再次调用过滤器,因此您可以通过直接调用摘要来强制执行它,如果您在JS代码中使用过滤器会更复杂一点

您可以在过滤器所在的控制器范围内调用$scope.$digest(),或者$scope.$apply()将触发$rootScope.$digest并消化所有范围

答案 1 :(得分:0)

我认为这里的问题是您以异步方式接收数据。当您以这种方式接收数据时,Angular没有意识到那里有新数据。您可以在成功回调中运行$scope.$apply()。这将运行AngularJS的摘要周期,然后更新过滤器中的数据。

Angular Docs for $scope.$apply