Angular-translate:从控制器设置自定义加载程序选项

时间:2015-05-12 09:28:05

标签: angular-translate

今天,我有一个translateProvider的配置,如下所示:

App.config(['$translateProvider', function ($translateProvider) {
  $translateProvider.preferredLanguage('en-US');
  $translateProvider.useLoader('TranslationLoader', { versionIdentifier : 127} );
  $translateProvider.useMissingTranslationHandler('MissingTranslationHandler');
}]);

问题是我在配置时不知道formIdentifier-option的值。在解析ui-route中的第一个状态后,我得到了这个值。我试图在该州的控制器中设置translationProvides加载器,但意识到这是不可能的:)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

angular-translate允许您将任何服务用作加载程序,只要它符合所需的界面即可。但它并没有限制您如何将其他参数传递给加载器。所以,你可以按照自己的意愿传递它们。

例如,您可以直接将其他参数设置到加载程序。只需在加载器上为它们实现setter:

module.factory('Loader', [
'$q',
function($q) {

    var myParam;

    var loader = function(options) {
        var allParams = angular.extend({}, { myParam: myParam }, options);
        var deferred = $q.defer();

        // load stuff

        return deferred.promise;
    };

    loader.setMyParam = function(param) {
        myParam = param;
    };

    return loader;
}])

此外,您可以尝试使用某些帮助程序服务(同步或异步:

)设置这些参数
module.factory('SyncLoader', [
'$q', '$injector',
function($q, $injector) {

    var loader = function(options) {
        var helper = $injector.get(options.helper);

        var myParam = helper.getMyParam();

        var deferred = $q.defer();

        // load stuff

        return deferred.promise;
    };

    return loader;
}]);

module.factory('AsyncLoader', [
'$q', '$injector',
function($q, $injector) {

    var loader = function(options) {
        var helper = $injector.get(options.helper);

        var deferred = $q.defer();

        helper.getMyParam()
            .then(function success(myParam) {
                // load stuff
            }, function error() {
                // fail, probably
            });

        return deferred.promise;
    };

    return loader;
}]);

此外,有可能以某种方式使用事件。或者,也许还有其他一些方法可能。这取决于具体的架构。