好的家伙我很确定它在某个地方有记录,但我似乎无法找到它,这就是为什么我提前道歉如果它已经被讨论过了。
我试图通过跨越不同控制器/指令等的过滤器来共享本地化服务。 在角度1.2.x它工作,但在1.3.x它没有。
参见plunkr 取消注释脚本以在1.2.x / 1.3.x之间切换
var app = angular.module('plunker', []);
app.service('trnsService', ['$rootScope',
function($rootScope) {
var trnsService = {},
trns = {
'CONSTANT': {
'en': 'En text',
'bla': 'Bla text'
}
},
lan = 'en';
trnsService.setLang = function setLang(lang) {
lan = lang;
console.log(lan);
if (!$rootScope.$$phase) {
$rootScope.$apply();
}
};
trnsService.getTrns = function getTrns(key) {
return trns[key][lan]
};
return trnsService;
}
])
.filter('trns', ['trnsService',
function(trnsService) {
return function(input) {
return trnsService.getTrns(input);
};
}
])
.controller('MainCtrl', function($scope, trnsService) {
$scope.setLang = function setLang(lg) {
trnsService.setLang(lg);
}
})
.controller('SecCtrl', function($scope, trnsService) {
$scope.setLang = function setLang(lg) {
trnsService.setLang(lg);
}
});
答案 0 :(得分:0)
找到它。将过滤器设置为$ stateful为我做了。只是希望我早些时候找到它并且没有因为它而失去一整天...
.filter('trns', ['trnsService',
function(trnsService) {
// return function(input) {
// return trnsService.getTrns(input);
// };
function decorateFilter(input) {
return trnsService.getTrns(input);
}
decorateFilter.$stateful = true;
return decorateFilter;
}
])
这里有更多信息:
https://github.com/angular-translate/angular-translate/issues/720
在这里