Angularjs 1.3异步过滤器无法正常工作

时间:2014-12-10 13:32:17

标签: angularjs asynchronous

我有以下代码,它基本上通过服务中的$ 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>

2 个答案:

答案 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()方法中加载区域设置文件;

像这样:http://codepen.io/anon/pen/vELogx