0

Ich möchte die Benutzer nicht auf bestimmte Seiten gehen zumindest sie zuvor angemeldet haben. Ich benutze derzeit dies:Angular JS: Inject-Service innerhalb von app.js

app.run(function ($rootScope, $route, $location) 
{ 
    var restrictedPages = 
      [ 
       '/Survey/', '/Survey/Detalle', '/Survey/Accepted', '/Account/Profile', 
       '/Auction/Detail', '/Survey/Accepted' 
      ]; 

    $rootScope.$on('$locationChangeStart', function (ev, next, current) 
    { 
     var nextPath = $location.path(); 
     var nextRoute = $route.routes[nextPath]; 

     if(restrictedPages.indexOf(nextPath) !== -1) 
     { 
      $location.path('/home'); 
     } 
    }); 
}); 

Mein Problem hier ist, dass ich in diesem Stück Code mein AccountService injizieren möchte. Wie kann ich das erreichen? Da die Lade Ordnung folgende

  • app.js ist (dargestellt ist der Code innerhalb hier)

  • homeService.js

  • accountService.js

Ich glaube wirklich, Das ist nicht der richtige Weg, aber es scheint so einfach zu sein und das Einzige, was mir fehlt, ist die Kontodienstleistung.

+0

Wie wird die 'AccountService' definiert? – gnerkus

+0

Was meinst du mit "Injektion"? Ein Dienst kann in einen anderen Dienst eingefügt werden. Aber ein "Stück Code" kann nicht injiziert werden. –

+0

Willst du sagen, dass dieser Run-Block deinen AccountService instanziieren und referenzieren soll? –

Antwort

2

dieses Modul Betrachten, das eine Account enthält, die implizite DI verwendet:

angular.module('myApp', []) 
.factory('accountService', function($rootScope) { 
    // $rootScope is implicitly injected 
}) 
.run(['$rootScope', '$route', '$location', 'accountService', function ($rootScope, $route, $location, accountService) 
{ 
    var restrictedPages = 
      [ 
       '/Survey/', '/Survey/Detalle', '/Survey/Accepted', '/Account/Profile', 
       '/Auction/Detail', '/Survey/Accepted' 
      ]; 

    $rootScope.$on('$locationChangeStart', function (ev, next, current) 
    { 
     var nextPath = $location.path(); 
     var nextRoute = $route.routes[nextPath]; 

     if(restrictedPages.indexOf(nextPath) !== -1 && !accountService.isLoggedIn()) 
     { 
      $location.path('/home'); 
     } 
    }); 
}]); 

, wenn Sie mehr Dokumentation wollen: https://docs.angularjs.org/guide/di

+0

Ich wusste nicht, dass Sie einen Dienst darin einfügen können. Aber wie funktioniert das, wenn der Account-Service noch nicht geladen wurde? Ich meine die tatsächliche Javascript-Datei – ggderas

+0

Sie können https://docs.angularjs.org/guide/bootstrap#manual-initialization für Start-Anwendung verwenden, wenn eckig bereit ist –