2016-04-23 17 views
0

Das ist mein app.js:Resolve Variable für ng Inklusions Ansicht

app.config(['$routeProvider', 
    function ($routeProvider) { 
     $routeProvider.when('/', { 
      templateUrl: 'partials/home.html', 
      controller: 'homeController', 
      resolve: { 
       loggedUser: getLoggedUser 
      } 
}]); 

Die Funktion getLoggedUser() gibt ein Versprechen, das in userService gelöst wird, wenn es den angemeldeten Benutzer gefunden hat. In meinem index.html schließe ich eine Navigationsleiste:

<ng-include src="'partials/navbar.html'" ng-controller="homeController"></ng-include> // Navbar 
<div ng-view></div> // Angular views 

Die Probleme sind:

  1. ng-Controller kann nicht mit Vorsatz verwendet werden, da es einen AngularJS Fehler von 'unbekanntem Anbieter erstellt. Daher verursacht das ng-include Probleme für die '/' Route.
  2. Ich kann/kann nicht wissen, wie man eine Auflösung für die Navbar angibt, da es keine Route hat, aber in jeder Ansicht in index.html enthalten ist. Und die Navigationsleiste muss den Namen des angemeldeten Benutzers anzeigen.

EDIT1: habe ich versucht, eine hässliche Lösung, durch myPromise.$$state.value in homeController Rückkehr und die resolve {...} entfernen. Es fühlt sich jedoch so an, als würde ich die $ q-Versprechen nicht so verwenden. Irgendwelche anderen Vorschläge?

EDIT2: Was ich meine ist, dass der geloggteUser unbekannt ist wegen ng-controller = "". Hier ist eine Erklärung: AngularJS, resolve and unknown provider.

Antwort

0

denke ich, der Grund, warum Sie eine Fehlermeldung über ‚unbekannte Provider‘ erhalten wird, dass Sie den Dienst userService in die Entschlossenheit Funktion injizieren müssen:

app.config(['$routeProvider', 
function ($routeProvider) { 
    $routeProvider.when('/', { 
     templateUrl: 'partials/home.html', 
     controller: 'homeController', 
     resolve: { 
      loggedUser: function(userService) { 
       return userService.getLoggedUser(); 
      } 
     } 
}]); 
+0

Vielleicht war ich ein bisschen unklar, ich meinte, dass der geloggte Benutzeranbieter unbekannt ist. Ich habe meine Antwort aktualisiert, damit Sie verstehen können, was ich meine. Dies ist ein Ergebnis von ng-controller = "". – Myone

0

Sie trennen die navbar vom Rest Ihrer App . Verwendung so etwas wie

<body> 
    <div ng-controller = "navbarController as nav"> 
    <div ng-show=" userIsLoggedIn"> <!-- show navbar only if true --> 
     <!-- navbar markup--> 
    </div> 
    </div> 
    <div ng-view> <!-- display other templates here --> </div> 
</body> 

können Sie dann mit einem service, in dem wir den Anmeldestatus und Anmeldeinformationen des Benutzers speichern. Da auf die Dienste app-weit zugegriffen werden kann, können Sie auf ihre Daten (wie den Benutzernamen) in Ihrer navbarController zugreifen.

+0

Nun, das ist es, was ich gerade habe. Das Problem ist, dass ich die resolve -Eigenschaft des routeProvider verwenden möchte, da andere Controller die luggedUser-Variable verwenden und daher ein $ q-Versprechen sein muss, aber ich kann den ng-controller nicht zusammen mit resolve verwenden, was ich in EDIT2 geschrieben habe . – Myone