2015-05-12 2 views
1

Сегодня у меня есть конфиг для translateProvider вида:углового перевод: Установите опцию пользовательского загрузчика из контроллера

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

Проблема заключается в том, что я не знаю значение formIdentifier-опцион на время конфигурации. Я получаю это значение после разрешения первого состояния в u-маршруте. Я попытался установить загрузчик translationProvides в контроллере состояния, но понял, что это невозможно :)

Любые идеи?

ответ

1

angular-translate позволяет использовать любую услугу в качестве загрузчика, если она соответствует требуемому интерфейсу. Но это не ограничивает вас способами передачи дополнительных параметров загрузчику. Итак, вы можете передать их так, как хотите.

Например, вы можете установить дополнительные параметры непосредственно на загрузчик. Просто реализовать сеттеры для них на верхней части загрузчика:

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; 
}]); 

Также возможно каким-то образом использовать события. Или, может быть, возможны другие способы. Это зависит от конкретной архитектуры.

Смежные вопросы