如何在某些事件后加载角度转换

时间:2016-01-08 12:04:21

标签: javascript angularjs angular-translate

我有一个在登录事件后调用的TranslationService,在这个服务中我想要对$ translateProvider.translation进行初始化,但是这个对象在app.config(...)之外似乎不是accessibile。在服务中我想替换以前的翻译。 这里有一些代码:

angular.module('myapp')
    .factory('TranslateService', ['$translate', $translateProvider, function($translate, $translateProvider) {
        $mydata = { "LABEL": "Label" };
        $translateProvider.translations('it', mydata); // injection problem
        $translate.somethingLike_getProvider().translations('it', mydata); // doesn't exist
}]);

在我的TranslateService中,我需要像

这样的东西
setenforce 0

1 个答案:

答案 0 :(得分:0)

诀窍是将$translateProvider存储在稍后可以访问的变量中:



var app = angular.module('app', ['pascalprecht.translate']);
var provider = null;

app.config(function($translateProvider) {
  provider = $translateProvider;
  $translateProvider.translations('en', {
    TITLE: 'Hello',
    FOO: 'This is a paragraph.'
  });
  $translateProvider.preferredLanguage('en');
});

app.factory('inlineLoaderFactory', function($q) {
  return function(options) {
    var deferred = $q.defer();
    deferred.resolve(options[options.key]);
    return deferred.promise;
  };
});

app.controller('MainCtrl', function($scope, $q, $translate) {
  $scope.override = function() {
    provider.useLoader('inlineLoaderFactory', {
      en: {
        TITLE: 'Hello My Friend',
        FOO: 'TLDR',
        CUSTOM: 'New Key'
      }
    });
    $translate.refresh();
  };
});




如果需要更改翻译,我们会告知$translateProvider使用inlineLoaderFactory translation loader serviceinlineLoaderFactory仅使用选项作为新的翻译数据。