J'utilise ui-router et j'ai une configuration dans laquelle j'utilise une vue parent qui a un contrôleur et une vue enfant qui ont aussi leurs propres contrôleurs. Chaque fois que je navigue vers l'une des vues enfant, le contrôleur parent est de nouveau instancié et effectue donc des requêtes inutiles au serveur. Je souhaite pouvoir naviguer entre les états enfants et réutiliser les variables résolues par le contrôleur parent.Contrôleur parent instancié à chaque fois qu'une vue enfant est appelée
Comment puis-je empêcher l'instanciation du contrôleur parent à chaque fois?
C'est ma config de routage:
$stateProvider
.state('researchLayoutEditor', {
url: '/research/:researchId/layoutEditor/:orderInGroup',
controller: 'layoutEditorController',
controllerAs: 'layoutEditorCtrl',
templateUrl: 'app/researchManagement/researchLayoutEditor/layoutEditor.html',
redirectTo: 'researchLayoutEditor.slide',
params: {
group: 'A',
orderInGroup: '0'
},
resolve: {
researchLayout: function (researchesService, $stateParams) {
return researchesService.getResearchLayout($stateParams.researchId, false);
},
research: function (researchesService, $stateParams) {
return researchesService.getResearch($stateParams.researchId);
}
}
}).state('researchLayoutEditor.slide', {
url: '/textual',
templateUrl: 'app/researchManagement/researchLayoutEditor/textSlide.html',
controller: 'textSlideController',
controllerAs: 'txtSlide'
}).state('researchLayoutEditor.movie', {
url: '/video',
templateUrl: 'app/researchManagement/researchLayoutEditor/movieSlide.html',
controller: 'movieSlideController',
controllerAs: 'movieSlide',
resolve: {
movieCategories: function (utilsService) {
return utilsService.getVideoCategories();
}
}
}).state('researchLayoutEditor.memory', {
url: '/memory',
templateUrl: 'app/researchManagement/researchLayoutEditor/memorySlide.html',
controller: 'memorySlideController',
controllerAs: 'memorySlide'
}).state('researchLayoutEditor.question', {
url: '/question',
templateUrl: 'app/researchManagement/researchLayoutEditor/questionSlide.html',
controller: 'questionSlideController',
controllerAs: 'questionSlide'
});
Et c'est le HTML:
<div id="mainContent">
<!-- our nested state views will be injected here -->
<div ui-view class="inner-content"></div>
</div>
voudrez peut-être regarder la réponse acceptée à cette question: http://stackoverflow.com/questions/22730868/ui-routeurs-résoudre-fonctions-sont-seulement-appelé-une fois –
Mon problème est le contraire, je veux empêcher le rechargement du contrôleur parent. La chose la plus étrange est que le premier état enfant (.slide) ne recharge pas le contrôleur parent lors de la première visite à la page ... –
Pouvez-vous reproduire le problème sur http://plnkr.co? –