У меня есть служба AngularJS, которая связывается с сервером и возвращает переводы различных разделов приложения:
angular
.module('utils')
.service('Translations', ['$q','$http',function($q, $http) {
translationsService = {
get: function(section) {
if (!promise) {
var q = $q.defer();
promise = $http
.get(
'/api/translations',
{
section: section
})
.success(function(data,status,headers,config) {
q.resolve(result.data);
})
.error(function(data,status,headers,config){
q.reject(status);
});
return q.promise;
}
}
};
return translationsService;
}]);
Название раздела передается как параметр section
функции get
.
Я использую модуль uu-router от AngularJS и следующий шаблон проектирования, описанный здесь
Итак, у меня есть следующие состояния config:
angular.module('app')
.config(['$stateProvider', function($stateProvider) {
$stateProvider
.state('users', {
url: '/users',
resolve: {
translations: ['Translations',
function(Translations) {
return Translations.get('users');
}
]
},
templateUrl: '/app/users/list.html',
controller: 'usersController',
controllerAs: 'vm'
})
.state('shifts', {
url: '/shifts',
resolve: {
translations: ['Translations',
function(Translations) {
return Translations.get('shifts');
}
]
},
templateUrl: '/app/shifts/list.html',
controller: 'shiftsController',
controllerAs: 'vm'
})
Это работает отлично, но, как вы можете заметить, я должен явно указать translations
в параметре разрешения. Я думаю, что это не так хорошо, как это дублирует логику.
Есть ли способ разрешить переводы по всему миру и избежать дубликатов кода. Я имею в виду какое-то промежуточное ПО.
Я думал о прослушивании $stateChangeStart
, а затем получал переводы, специфичные для нового состояния, и привязывал их к контроллерам, но я не нашел способ сделать это.
Любые советы будут оценены в значительной степени.
Важное примечание:
В моем случае разрешенный translations object
должен содержать данные трансляции, а не service/factory/whatever.
С уважением.