Con ui-router, aggiungo tutta la logica di risoluzione nella funzione di stato come questa;Ui-router angolare risolve il valore come stringa
//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);
}
}
});
Tuttavia IMO, resolve
oggetto deve appartenere a un controller, ed è facile da leggere e conservare se è definito all'interno di un file di controllo.
//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.
});
Tuttavia, quando definisco come MyCtrl.resolve
, a causa di IIFE, ottengo il seguente errore.
Failed to instantiate module due to: ReferenceError: MyCtrl is not defined
Quando definisco che uno come stringa 'MyCtrl.resolve'
, ottengo questo
Error: 'invocables' must be an object.
vedo quello controller è definita come stringa, quindi penso è anche possibile fornire il valore come stringa utilizzando un decoratore o qualcosa del genere.
Qualcuno ha fatto questo approccio? In modo che possa mantenere pulito il mio routings.js e inserire informazioni pertinenti. in un file pertinente?
Come accennato in precedenza, il controller non è ancora disponibile a quel punto. Lo schema di progettazione che utilizzo ha un servizio 'Resolver'. Usando 'this.self.name' nell'ambito delle funzioni di risoluzione (dove si effettua la richiesta' Customer.get() '), è possibile ottenere il nome dello stato. Quindi, facendo qualcosa come 'return Resolver.prepare (this.self.name)', puoi estrarre tutta la logica in 'Resolver' e ridurre il tuo codice a una singola riga (e uguale) nelle dichiarazioni di stato. –