我正在使用angularjs 1.4.4
我試圖更新$ locale動態並且它正在更新。當過濾器運行時,它使用正確的更新$ locale來評估自己。不幸的是舊的過濾器不會重新運行。
var englishMonths = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var frenchMonths = ["janvier", "f\u00e9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre"];
$scope.array = [];
$scope.currentDate = 'english';
$scope.addDate = function(){
$scope.array.push(new Date());
};
$scope.switchDate = function(){
var monthArray = englishMonths
if($scope.currentDate === 'english'){
monthArray = frenchMonths;
$scope.currentDate = 'french';
}
else{
$scope.currentDate = 'english';
}
$locale.DATETIME_FORMATS.MONTH.length = 0;
for(var x = 0; x < monthArray.length; x++){
$locale.DATETIME_FORMATS.MONTH.push(monthArray[x] + ($scope.currentDate === 'french' ? "FRENCH" : ''));
}
};
而且在DOM:
<button data-ng-click="addDate()">Add Date</button>
<button data-ng-click="switchDate()">Toggle Language, current: {{ currentDate }}</button>
<hr></hr>
<div data-ng-repeat="date in array">
{{ date | date:'longDate' }}
</div>
如果您添加日期到陣列將在當前的語言評價。如果您更改語言,舊的日期將不會重新評估。
您可以在我所做的小提琴看到這一點:http://jsfiddle.net/wf8ojqjg/
所以我需要一種方法爲$語言環境進行更新,這實際上可以歸結爲迫使所有的過濾器重新計算。
怎麼樣的解決方案,像[這](http://jsfiddle.net/davidepastore/wf8ojqjg/1/)? –
我有數組遍佈我的應用程序,所以這是行不通的。 –
它們是否共享相同的結構?您可能有興趣使用[服務](https://docs.angularjs.org/guide/services)。 –