С ui-router я добавляю все логические решения в функцию состояния, например:
//my-ctrl.js
var MyCtrl = function($scope, customers) {
$scope.customers = customers;
}
//routing.js
$stateProvider.state('customers.show', {
url: '/customers/:id',
template: template,
controller: 'MyCtrl',
resolve: { // <-- I feel this must define as like controller
customers: function(Customer, $stateParams) {
return Customer.get($stateParams.id);
}
}
});
Однако объект IMO, resolve
должен принадлежать контроллеру, и его легко читать и поддерживать, если он определен в файле контроллера.
//my-ctrl.js
var MyCtrl = function($scope, customers) {
$scope.customers = customers;
}
MyCtrl.resolve = {
customers: function(Customer, $stateParams) {
return Customer.get($stateParams.id);
};
};
//routing.js
$stateProvider.state('customers.show', {
url: '/customers/:id',
template: template,
controller: 'MyCtrl',
resolve: 'MyCtrl.resolve' //<--- Error: 'invocables' must be an object.
});
Однако, когда я определяю его как MyCtrl.resolve
, из-за IIFE, я получаю следующую ошибку.
Failed to instantiate module due to: ReferenceError: MyCtrl is not defined
Когда я определяю его как строку 'MyCtrl.resolve'
, я получаю этот
Error: 'invocables' must be an object.
Я вижу, что контроллер определен как строка, поэтому я думаю, что также можно указать значение как строку, используя декоратор или что-то в этом роде.
Кто-нибудь сделал такой подход? Так что я могу сохранить мои маршруты .js чистыми и помещать соответствующую информацию. в соответствующем файле?