2015-02-24 4 views
1

Мой фильтр зависит от службы service.show() возвращаемого значения:Как обновить возвращаемое значение фильтра в AngularJS?

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 или контроллеры?

ответ

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, что часто приводит к проблемам с производительностью. Многие фильтры с сохранением состояния могут быть преобразованы в фильтры без учета состояния, просто подвергая скрытое состояние модели и превращая ее в аргумент фильтра.

+0

Nevermind, он работает из коробки без флага штата (бонусный вопрос: почему?). Не знаю, почему это не сработало в первый раз, я обновляю свой вопрос как можно скорее. Благодарю. – gremo

Смежные вопросы