Risoluzione dello stato nidificato del router UI angular negli stati figlio

In un’app angular su cui sto lavorando, vorrei che ci fosse uno stato genitore astratto che deve risolvere certe dipendenze per tutti gli stati dei suoi figli. Nello specifico, mi piacerebbe che tutti gli stati richiedessero a un utente autenticato di ereditare tale dipendenza da uno stato di autenticazione di root.

Sto incontrando problemi in cui la dipendenza genitore non viene sempre risolta. Idealmente, mi piacerebbe che lo stato genitore verificasse che l’utente abbia ancora effettuato l’accesso automaticamente per qualsiasi stato figlio. Nei documenti , dice

Gli stati figlio erediteranno dipendenze risolte da uno o più genitori, che possono sovrascrivere.

Sto scoprendo che la dipendenza genitore viene risolta solo se inserisco uno stato figlio da uno stato esterno al genitore, ma non se si sposta tra stati fratelli.

In questo esempio, se si sposta tra gli stati authroot.testA e authroot.testB, il metodo GetUser viene chiamato una sola volta. Quando ti sposti other stato e tornerai, verrà eseguito di nuovo.

Sono in grado di mettere la dipendenza utente su ciascuno degli stati figlio per garantire che il metodo venga chiamato ogni volta che si immette uno di questi stati, ma ciò sembra vanificare lo scopo della dipendenza ereditata.

Sto comprendendo i documenti in modo errato? C’è un modo per forzare lo stato genitore a ri-risolvere le sue dipendenze anche quando lo stato cambia tra i fratelli?

jsfiddle

       (function(ng) { var app = ng.module("Test", ["ui.router"]); app.config(["$stateProvider", "$urlRouterProvider", function(sp, urp) { urp.otherwise("/testA"); sp.state("authroot", { abstract: true, url: "", template: "
", resolve: {User: ["UserService", function(UserService) { console.log("Resolving dependency..."); return UserService.GetUser(); }]} }); sp.state("authroot.testA", { url: "/testA", template: "

Test A {{User|json}}

", controller: "TestCtrl" }); sp.state("authroot.testB", { url: "/testB", template: "

Test B {{User|json}}

", controller: "TestCtrl" }); sp.state("other", { url: "/other", template: "

Other

", }); }]); app.controller("TestCtrl", ["$scope", "User", function($scope, User) {$scope.User = User;}]); app.factory("UserService", ["$q", "$timeout", function($q, $timeout) { function GetUser() { console.log("Getting User information from server..."); var d = $q.defer(); $timeout(function(){ console.log("Got User info."); d.resolve({UserName:"JohnDoe1", OtherData: "asdf"}); }, 500); return d.promise; }; return { GetUser: GetUser }; }]); })(window.angular); Goto A Goto B Goto Other
Loading...