Defina os retornos de chamada onEnter e onExit em outro arquivo com Angular UI Router
-
27-12-2019 - |
Pergunta
Eu tenho um aplicativo simples usando Angular UI Router com alguns estados.
Na verdade eu tenho esse tipo de código no meu roteador:
$stateProvider.state('map.layers', {
url: '/layers',
templateUrl: 'views/layers.html',
controller: 'LayersCtrl',
onEnter: function(map: Master.Map) {
// do stuff
},
onExit: function(map: Master.Map) {
// do stuff
}
});
O controlador está definido em outro arquivo e estou procurando uma boa maneira de definir os retornos de chamada onEnter e onExit no mesmo arquivo.
Na sua opinião, qual é a melhor solução?Uma variável global deveria funcionar, mas não é muito bonita.
Solução
Você pode fazer isso, mas sem saber mais isso é um cheiro de código.Você está misturando lógica entre controladores e estados, mas eles devem ser separados.
De qualquer forma, veja como você pode fazer isso:
No seu controlador, injete o $state
objeto e usar o $state.get
método:
.controller('layersCtrl', function($state) {
$state.get('map.layers').onEnter = blah;
$state.get('map.layers').onExit = blahblah;
});
Mas, em vez disso, recomendo que você extraia essa funcionalidade compartilhada para um serviço.Se você está achando difícil fazer isso, eu daria uma olhada profunda em seu código porque parece haver muito acoplamento entre os módulos.