Angularjs 通过两个控制器之间的筛选器共享服务不会';t在角度1.3.x下工作
好的,伙计们,我很确定它被记录在某个地方,但我似乎找不到它,这就是为什么我提前道歉,如果它已经被讨论过的话 我试图通过不同控制器/指令等的过滤器共享本地化服务。 在angular 1.2.x中,它是工作的,但在1.3.x中它不工作 看 取消对脚本的注释以在1.2.x/1.3.x之间切换Angularjs 通过两个控制器之间的筛选器共享服务不会';t在角度1.3.x下工作,angularjs,migration,Angularjs,Migration,好的,伙计们,我很确定它被记录在某个地方,但我似乎找不到它,这就是为什么我提前道歉,如果它已经被讨论过的话 我试图通过不同控制器/指令等的过滤器共享本地化服务。 在angular 1.2.x中,它是工作的,但在1.3.x中它不工作 看 取消对脚本的注释以在1.2.x/1.3.x之间切换 var app = angular.module('plunker', []); app.service('trnsService', ['$rootScope', function($rootScope)
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);
}
});
找到了。将筛选器设置为$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;
}
])
这里有更多信息:
这里呢