今天,我有一个translateProvider的配置,如下所示:
App.config(['$translateProvider', function ($translateProvider) {
$translateProvider.preferredLanguage('en-US');
$translateProvider.useLoader('TranslationLoader', { versionIdentifier : 127} );
$translateProvider.useMissingTranslationHandler('MissingTranslationHandler');
}]);
问题是我在配置时不知道formIdentifier-option的值。在解析ui-route中的第一个状态后,我得到了这个值。我试图在该州的控制器中设置translationProvides加载器,但意识到这是不可能的:)
有什么想法吗?
答案 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;
}]);
此外,有可能以某种方式使用事件。或者,也许还有其他一些方法可能。这取决于具体的架构。