2015-05-12 24 views
1

今天,我對translateProvider的配置看起來像這樣:角翻譯:設置自定義選項裝載機從控制器

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

的問題是,我不知道在formIdentifier選項的值配置時間。在解析ui-route中的第一個狀態後,我得到這個值。我試圖在狀態的控制器中設置translationProvides loader,但意識到這是不可能的:)

任何想法?

回答

1

角轉換允許,只要它滿足所需的接口,你可以使用任何服務作爲裝載機。但它並不限制你如何將其他參數傳遞給加載器。所以,你可以像你想要的那樣通過它們。

例如,您可以直接設置附加參數加載器。只實現制定者對他們在您的裝載機頂部:

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

而且,有可能以某種方式使用事件。或者,也許,還有一些其他的方式成爲可能。這取決於具體的架構。