我有一家工厂跟踪我的翻译。基本上我将语言设置为一个字符串,然后在语言更改时使用过滤器更新我的视图。AngularJS工厂/过滤器没有正确更新
到目前为止,如果我事先在我的视图中定义语言,一切都按预期工作,但是当我单击按钮更新语言时,什么都不会发生。
任何人都可以请指出我做错了什么?
我的观点:
<div ng-app="testApp">
<div ng-controller="myController">
<p >{{ data.title | translate }}</p>
<p >{{ data.text }}</p>
<button type="button" ng-click="changeLanguage('en')">English</button>
<button type="button" ng-click="changeLanguage('sl')">Slovene</button>
</div>
</div>
我的脚本:
angular.module('langService', [])
.factory('Language', function() {
var currentLanguage = 'en';
return {
setCurrentLanguage: function(value) {
currentLanguage = value;
},
getCurrentLanguage: function() {
return currentLanguage;
}
}
});
var testApp = angular.module('testApp', ['langService']);
testApp.controller('myController', function ($scope, Language) {
$scope.data = {
title: 'PAGE_TITLE',
text :'some random page text'
};
$scope.changeLanguage = function(value) {
Language.setCurrentLanguage(value);
}
});
testApp.constant('Translations', {
en: {
'PAGE_TITLE': 'Hi!'
},
sl: {
'PAGE_TITLE': 'Živjo!'
}
});
testApp.filter('translate', function(Translations, Language) {
return function(input) {
return Translations[Language.getCurrentLanguage()][input] || '';
};
});
我在codepen创建以此为例在项目实施之前尝试一下。
任何帮助表示赞赏。
我认为,因为您的数据没有改变,表达式没有被重新评估。显式$ scope。$ digest()在changeLanguage方法的末尾是否有帮助? –