2016-10-06 5 views
3

Sagen wir in 90-95% meiner Routen Ich muss überprüfen, ob der Benutzer in (sagen wir Gefängnis) ist. Dann mache ich zur Zeit so etwas wie:Angularjs Routing Auflösung

$routeProvider 
    .when("/news", { 
     templateUrl: "newsView.html", 
     controller: "newsController", 
     resolve: { 
      injail: function(jailservice){ 
       return jailservice.injail(); 
     } 
    } 
}) 

Muss ich tun, um diese Entschlossenheit auf jeder Strecke wirklich? (Die Routen befinden sich in verschiedenen Ordnern, jede Routendatei enthält eine Route für ein bestimmtes Modul).

Ist es etwas Besseres, was ich tun kann, als die Entschuldigung auf jeder Route anzurufen?

Antwort

2

Ein paar Optionen.

Option 1 - Verwendung Elternzustands entschlossen

$stateProvider 
    .state('parent', { 
     resolve:{ 
      resA: function() {} 
     } 
    }) 
    .state('parent.child', { 
     // resA from parent state available to all child states 
     controller: function (resA) {} 
    }); 

More info

Option 2 - externe Vorsatz Funktionen (weniger duplizierten Code)

Deklaration:

resolve: { 
    myResolve: myResolve 
} 

Wenn ES2015 verwenden, können Sie es zu resolve: {myResolve} (see enhanced object literals)

Definition (in einer separaten Datei mit allen Entschlüssen) verkürzen:

myResolve.$inject = ['myService']; 
function myResolve(myService) { 
    return myService.getStuff(); 
} 

More info

EDIT - Beispiel mit Ihrem code:
Ändern Sie in Ihrer Routenerklärung die Auflösung in: resolve: {injail: injailResolve}

In separaten Datei, die Definition:

injailResolve.$inject = ['jailservice']; 
function injailResolve(jailservice) { 
    return jailservice.injail(); 
} 
+0

Would Option 1 Arbeit über Ordner? – maria

+0

Denken Sie so, aber es wird erfordern, dass Sie die Struktur Ihrer Routen ändern, kann ziemlich viel Arbeit sein ... Option 2 ist einfacher. –

+0

Wie sieht die myservice-Injektion aus? Könnten Sie auch ein Beispiel für diese Datei angeben? – maria