2016-10-01 3 views
0

Ich versuche, eine einfache Funktionalität auf der Homepage hinzuzufügen, die den aktuell angemeldeten Benutzer anzeigt. Ich sende ein GET an den Endpunkt/Benutzer, der das Prinzip zurückgibt. Diese eckige Lernkurve bringt mich dazu, langsam alle meine Haare auszuziehen, weil ich nicht herausfinden kann, warum das nicht funktioniert, wenn alles andere funktioniert. Der einzige Grund, warum ich mir vorstellen kann, warum es nicht funktioniert, ist, dass ich bereits einen GET an/Benutzer in einem anderen Controller (für die Anmeldung) sende, aber ich weiß nicht, warum das nicht dazu führt, dass es nicht einmal in Chrome auftaucht XHR.Spring + Angular GET nicht registrieren

index.html:

   <!doctype html> 
       <html ng-app="wishingWell"> 
       <head> 
        <meta charset="UTF-8"> 
        <meta name="viewport" 
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 
        <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
        <link rel="stylesheet" href="/css/normalize.css"> 



        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-route.js"></script> 
        <script src="https://code.jquery.com/jquery-3.1.1.js" integrity="sha256-16cdPddA6VdVInumRGo6IbivbERE8p7CQR3HzTBuELA=" crossorigin="anonymous"></script> 
        <script src="/javascript/app.js"></script> 

        <title>Wishing Well</title> 
       </head> 

       <body> 
         <nav class="nav" ng-controller="home as controller"> 
          <ul class="navback"> 
           <li> 
            <a class="active" href="#/">The Well</a> 
           </li> 
           <li ng-hide="!authenticated"> 
            <a href="#/profile" >Profile</a> 
           </li> 
           <li ng-hide="authenticated"> 
            <a href="#/sign-up">Sign Up</a> 
           </li> 
           <li ng-hide="authenticated"> 
            <a href="#/login">Log In</a> 
           </li> 
           <li ng-hide="!authenticated"> 
            <a href="" ng-click="controller.logout()">Sign Out</a> 
           </li> 
           <li id="right" ng-hide="!authenticated"> 
            <p>{{controller.user.name}}</p> 
           </li> 
          </ul> 
         </nav> 

         <div ng-view></div> 

         <script src="/javascript/wishAJAX.js"></script> 
       </body> 
       </html> 

app.js:

  var wishingWell = angular.module('wishingWell', [ 'ngRoute' ]); 

      wishingWell.config(function($routeProvider, $httpProvider) { 

       $routeProvider.when('/', { 
        templateUrl : 'home.html', 
        controller : 'home', 
        controllerAs: 'controller' 
       }).when('/login', { 
        templateUrl : 'login.html', 
        controller : 'navigation', 
        controllerAs: 'controller' 
       }).when('/sign-up', { 
        templateUrl : 'sign-up.html', 
        controller : 'register', 
        controllerAs: 'controller' 
       }).otherwise('/'); 

       $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; 

      }); 



        wishingWell.controller('home', function($rootScope, $http, $location) { 
        var jsonResponse; 
        var jsonString; 
        var self = this; 
        self.user = {}; 

        $http.get('user').then(function(response) { 
         jsonString = JSON.stringify(response.data); 
         jsonResponse = JSON.parse(jsonString); 

         self.user.name = jsonResponse.principal[0].username; 
         console.log(self.user.name); 
        }); 


        self.logout = function() { 
         $http.post('logout',{}).finally(function() { 
          $rootScope.authenticated = false; 
          $location.path("/"); 
         }); 
        } 
       }); 

Lassen Sie mich wissen, ob es irgendwelche anderen Controllern Sie brauchen, sind zu sehen, der Lage sein, zu wissen, warum dies nicht funktioniert . Der REST-Controller in Spring funktioniert für den Login-Controller und ist sehr einfach, also habe ich ihn nicht aufgenommen. Die home.html wird injiziert, ist aber hier nicht relevant, da ich den Namen in das letzte "li" Element in "nav" setze und den Controller im nav Bereich deklariert habe. Die Logout-Funktion funktioniert ebenfalls, daher werden alle Ideen sehr geschätzt.

Antwort

0

Für jeden, der in Zukunft darüber stolpert, ich herausgefunden, dass, weil meine <nav> Elemente außerhalb der ng-view waren, wurde dieser Controller nur einmal beim Laden der Seite instanziiert, weshalb es nicht nach der Protokollierung aktualisieren würde in. Das Setzen der get() in eine Funktion löste dies.