如何从服务到指令加载常量?

时间:2014-03-25 09:45:53

标签: angularjs angularjs-directive angularjs-scope

我正在尝试将语言常量从服务加载到指令并将其显示给用户。 我发现如果我只在div中使用{{}},那么文本就不会呈现。 但是,通过添加任何字符,即'。'将使它加载。

如果有人能够解释,幕后发生的事情以及为什么我需要那些额外的角色,我将不胜感激。

指令代码

directive('projectHeader', ['LangService', function(langService) {
    return {
        restrict: 'E',
        replace: true,
        scope: true,
        link: function postLink($scope, tElement, tAttrs, controller) {
            $scope.lang = langService.getLocalisedStrings();
        },

        templateUrl: "app/header.html"
    };
}])

header.html中

<div class="header">{{lang.header}}.</div>

LangService定义

angular.module('project.services').factory('LangService', ['$http', function ($http) {
var langConstants;

return {
    init: function(lang) {
        $http.get("app/lang/"+ lang + ".properties").then(function(response){
            langConstants = response.data;
        });
    },

    getLocalisedStrings: function () {
        return langConstants;
    }
};
}]);

1 个答案:

答案 0 :(得分:0)

您可能在postLink和init方法中的$ http之间进行竞争。尝试在指令中的getLocalisedStrings()上添加一个监视器,以便getLocalisedStrings()返回一些数据后立即更新$ scope.lang。