在角度服务中加载JSON

时间:2015-07-08 12:38:08

标签: angularjs asynchronous

我正在尝试使用Jed来翻译角度应用。为此,我使用提供Jed对象的Angular服务。现在,Jed在创建时已经需要存储在JSON文件中的翻译:

app.factory( 'jed', function ( $http ) {

    var ret = { jed: null };

    $http.get( 'i18n/de_CH/messages.json' )
            .success( function ( data ) {
                ret.jed = new Jed( data );
            } );

    return {
        get jed() {
            // Is null until we receive messages.json
            return ret.jed;
        }
    };
} );

因此,有了Ajax请求,

jed

问题是在HTTP请求返回之前,{{jed.gettext( 'Quit' )}}没有初始化。

可能的解决方案是返回一个延迟对象,但是由于我们总是要检查延迟对象并使用函数回调,因此使用率很难看,并且内联{{1}}也不再有用。

这样做有干净的方法吗?

1 个答案:

答案 0 :(得分:0)

是的,有办法。

成功

return {
    get jed()
        return ret;
    }
};

并注意对象的变化。

这是我的另一个答案中的a demo,显示了这种方法。

另一个选择是始终从异步服务返回promise:

app.factory( 'jed', function ($http) {
    return $http.get( 'i18n/de_CH/messages.json')
} );

并在控制器中打开它们:

jed.then(function (data) {
    $scope.jed = new Jed(data);
});