我有以下代码,它基本上通过服务中的$ http.get请求从服务器加载消息,然后在i18n过滤器中使用。过滤器工作正常,角度版本为1.2.24,但在更新到1.3.5后,它不再有效。
我想知道是否有人遇到过类似的问题,可以对此有所启发。
var module = angular.module('myApp', [])
.factory('MessageFactory', function ($http, $locale, $log) {
var messages = {};
$http.get("/i18n/" + $locale.id + "/list", {cache: true}).success(function(data) {
$log.debug("Getting messages for", $locale.id);
messages = data;
});
return {
getMessage: function (key) {
return messages[key];
}
}
})
.filter('i18n', function (MessageFactory) {
return function (key) {
return MessageFactory.getMessage(key);
}
});
Html代码
<h2>{{'message.page.title'|i18n}}</h2>
答案 0 :(得分:10)
经过几个小时的挖掘后,我改变了
.filter('i18n', function (MessageFactory) {
return function (key) {
return MessageFactory.getMessage(key);
}
});
到
.filter('i18n', function (MessageFactory) {
function filterFn(key) {
return MessageFactory.getMessage(key);
}
filterFn.$stateful = true;
return filterFn;
});
注意 filterFn。$ stateful 这就是诀窍。
答案 1 :(得分:0)
我找不到文档证明,但看起来像1.3.x只在第一次使用时才在模块内部执行代码,并且&lt; = 1.2.x在app启动时执行。
您似乎需要更改代码以在app.run()
方法中加载区域设置文件;