如何在AngularJS中更新过滤器返回值?

时间:2015-02-24 10:45:11

标签: angularjs

我的过滤器取决于服务service.show()返回值:

angular.module('util')
    .filter('formatMoney', ['accounting', 'service', function (accounting, service) {
        return function (number) {
            return service.show()
                ? accounting.formatMoney(number, '€', 3, '.', '.', '%s %v')
                : '';
        };
    }]);

在运行时service.show()可以更改,返回truefalse。但过滤器的返回值不会改变。

如何在不使用formatMoney或控制器的情况下强制更新所有$scope过滤器?

1 个答案:

答案 0 :(得分:2)

您可以尝试有状态过滤器,描述为here。这意味着您只需要将$stateful注释添加到过滤器中:

angular.module('util')
    .filter('formatMoney', ['accounting', 'service', function (accounting, service) {
        function formatMoney(number) {
            return service.show()
                ? accounting.formatMoney(number, '€', 3, '.', '.', '%s %v')
                : '';
        }
        formatMoney.$stateful = true;
        return formatMoney;
    }]);

另请注意Angular文档中的警告:

  

强烈建议不要编写有状态的过滤器,因为Angular会优先执行这些过滤器,这通常会导致性能问题。只需将隐藏状态作为模型公开并将其转换为过滤器的参数,就可以将许多有状态过滤器转换为无状态过滤器。