2015-02-24 28 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()可以改變,返回truefalse。但是過濾器的返回值不會改變。

如何在不使用$scope或控制器的情況下強制更新所有formatMoney過濾器?

回答

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不能優化那些執行,這往往會導致性能問題。許多有狀態過濾器可以轉換爲無狀態過濾器,只需將隱藏狀態作爲模型公開,並將其轉換爲過濾器的參數即可。

+0

沒關係,它沒有狀態標誌(獎金問題:爲什麼?)開箱即用。不知道爲什麼它第一次沒有工作,我會盡快更新我的問題。謝謝。 – gremo 2015-02-24 18:51:36

相關問題