2016-04-19 7 views
2

Ich benutze den nativen AngularJS-Router und frage mich, ob es eine Möglichkeit gibt, einen Controller bedingt einer Route zuzuweisen. Zum Beispiel, sagen wir, ich drei Benutzertypen haben:AngularJS - Bedingte Einstellung eines Controllers für die Route

  • Gast
  • Benutzer
  • System Admin

Wenn sie auf die Homepage kommen, möchte ich in der Lage sein, einen anderen Controller zuweisen basierend auf dem Benutzertyp. Also hätte ich drei registrierte Controller: guestHomeCtrl, userHomeCtrl, systemAdminHomeCtrl.

stellte ich mich so etwas wie diese:

$routeProvider 
    .when('/' , { 
     controller: getHomeCtrl(), 
     controllerAs: 'homeCtrl' 
    }) 

Ich weiß, dass ich gerade in der Zeichenfolge des registrierten Controller passieren kann, aber das Hauptproblem ist in der Lage, um herauszufinden, welche Art von Benutzer angemeldet ist ich. Habe eine , die das normalerweise verfolgt, aber es scheint nicht so, als könnte ich darauf zugreifen, wo ich die Routen eingerichtet habe. Oder irre ich mich?

Jede Richtung würde viel helfen.

Antwort

1

Überprüfen Sie this Artikel von Dan Wahlin.

Er erklärt, wie man etwas nahe zu Ihrer Frage erreicht.

1

Ich würde vorschlagen, mit einem einzigen Controller userService verwenden. Lesen Sie die folgende Seite durch, speziell das Argument resolve.

https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider

Dieser Blog-Eintrag beschreibt auch, wie die Entschlossenheit, verwenden.

http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx

Versuchen Sie, die spezifische Funktion oder Variable, die Sie an die Steuerung benötigen senden. Ich habe userService.User.userAccountStatus verwendet, aber es hängt wirklich von der Einrichtung in Ihrer Servicedatei ab.

Ich benutze ngInject für das Injizieren von Abhängigkeiten, aber ich nehme an, dass Sie den Kern der Dienstleistungen für einen Controller bekommen.

angular 
    .module('app') 
    .controller('HomeCtrl', HomeCtrl) 

    /** @ngInject */ 
    function HomeCtrl($scope, $log, $state, userService) { 
    } 

Ich kann weitere Beispiele zur Verfügung stellen, wenn Sie sie brauchen.

Verwandte Themen