我的过滤器取决于服务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()
可以更改,返回true
或false
。但过滤器的返回值不会改变。
如何在不使用formatMoney
或控制器的情况下强制更新所有$scope
过滤器?
答案 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会优先执行这些过滤器,这通常会导致性能问题。只需将隐藏状态作为模型公开并将其转换为过滤器的参数,就可以将许多有状态过滤器转换为无状态过滤器。