所以我有一个由应用程序语言决定的资源文件:
.constant('defaultLanguage', 'en_EU')
.service('LocalizationService', ['$resource', 'defaultLanguage', function ($resource, language) {
// Create our service
var service = {
get: function () {
// Use default if no language is supplied
language = language || 'en_EU';
// Get the path of the json
var path = '/assets/resources/' + language + '/resource.json';
// Return our promise
var resource = $resource(path).get();
// Get our promise
return resource.$promise;
}
};
// Return our service
return service;
}])
我要做的是在可能访问它的任何其他服务之前将资源文件加载到我的应用程序中。 我试着这样做:
.run(['LocalizationService', function ($localization) {
// Get our resource file from the server
$localization.get().then(function (response) {
// Assign our response to the service
$localization.resource = response;
console.log($localization);
});
}])
希望我可以使用这样的服务:
.service('SimpleDesignerValidationService', ['$q', 'LocalizationService', function ($q, localization) {
// Create our service
var service = {
// Validates the design
design: function (kit) {
// Create a deferred promise
var deferred = $q.defer(),
garments = kit.garments,
valid = true;
// For each garment
for (var i = 0; i < garments.length; i++) {
// Get our current garment
var garment = garments[0];
// if our design is empty
if (!garment.design) {
// We are not valid
valid = false;
// Break
break;
}
}
// If we are not valid
if (!valid) {
// Display a warning
deferred.reject(localization.resource.designInvalid.message);
// If we are valid
} else {
// Resolve our promise
deferred.resolve();
}
// Return our promise
return deferred.promise;
}
}
// Return our service
return service;
}])
但在我接受服务之前,承诺从未得到解决。 无论如何我可以确保服务在注入其他服务或控制器之前已经解决了它的承诺吗?
答案 0 :(得分:0)
无论如何,我可以确保服务在将其注入其他服务或控制器之前已解决承诺
在进入另一个控制器之前,您可以使用ui.router来resolve承诺。在定义状态时,在resolve属性中添加 $ localization.get()。
答案 1 :(得分:0)
你
在类似情况下,我最终在加载翻译时广播消息。所有使用翻译的控制器都会收听广播事件并做一些必要的事情来刷新视图。
如果用户可以更改语言,这尤其有用。在这种情况下,您只需加载另一个语言文件并再次播放。