2016-05-22 4 views
0

Ich habe den folgenden Code versucht. Ich habe nach Antworten für die Antwort und Lösungen gesucht, um $ apply, $ timeout zu verwenden, aber irgendetwas hat in meinem Fall nicht funktioniert. Ich bekomme Bündelfehler.nicht in der Lage, Scope-Wert nach Ajax-Aufruf aktualisiert

JS:

var app = angular.module("test",[]) 
app.config(function($routeProvider, $locationProvider) { 
    $routeProvider 
    .when('/', { 
     templateUrl: 'login.html', 
     controller: 'loginCtrl' 
    }) 
}); 

app.controller("loginCtrl",["$scope","$http","$location",function($scope,$http,$sessionStorage,$location,$timeout) { 
    $scope.loginSuccess = false; 
    $scope.loginAuthencation = function(){ 
     $http({ 
      method: 'post', 
      url:'http://192.168.42.200:5000/authenticate', 
      data:{"username":$scope.username,"password":$scope.password} 
     }).then(function successCallback(successResponse) { 
      console.log(successResponse); 
      if(successResponse.data.status==="success"){          
       $scope.loginSuccess = true; 
      } else { 
       $scope.loginSuccess = false; 
      } 
     }, function errorCallback(response) { 
      $scope.loginSuccess = false; 
     }); 
    } 
}]); 

index.html:

<p>{{loginSuccess}}</p> 
<div ng-view></div> 

login.html:

<div> 
    <img src="img/logo.png" alt="appicon"/> 
</div> 
<div class="sub-element"> 
    <p><input type="text" name="username" placeholder="username" ng-model="username"/></p> 
    <p><input type="password" name="password" placeholder="password" ng-model="password"/></p> 
</div> 
<input type="checkbox" value="Remember Me" class="item-left"/>Remember Me 
<p class="submit-btn"><input type="submit" id="login-form" value="Login" ng-click="loginAuthencation()" /></p> 

Wert wird nicht aktualisiert zu werden ..

+0

was ein Fehler ?? –

+0

nach dem obigen code..Keine Fehler, aber der Wert wird nicht nach AJAX Erfolg aktualisiert werden –

+0

können Sie Ihre JSON-Antwort-Struktur auch teilen? Überprüfen Sie in Ihrer Erfolgsfunktion console.log (successResponse) –

Antwort

1

Sie haben <p>{{loginSuccess}}</p> außerhalb Ihrer ng-Ansicht. Daher ist der Bereich von loginCtrl nicht zugänglich. Entweder auf <p>{{loginSuccess}}</p> innerhalb von login.html zugreifen oder $rootScope.loginSuccess verwenden, damit es überall funktioniert.

+0

siehe meine aktualisierte Frage sorry für Verwirrung. Ich habe den gleichen Weg benutzt. –

+0

ok. Was bedeutet console.log (successResponse); in der Browserkonsole drucken? –

+0

http://pasteboard.co/16H5fLrF.png –

-1

können Sie versuchen, unter einem:

function(successResponse) { 
       if(successResponse.data.status==="success"){           
        $scope.loginSuccess = true;  
       } else { 
        $scope.loginSuccess = false; 
       } 
       if(!$scope.$$phase) { 
       $scope.$digest(); 
} 

      } 
+0

Ich bekomme diesen Fehler '$ Digest ist bereits in Bearbeitung' –

+0

Sie können überprüfen, ob ein $ Digest bereits in Bearbeitung ist, indem Sie $ scope. $$ phase. –

+0

$ scope. $ Digest() synchronisiert einfach sein Modell mit der Ansicht, verdaut aber nicht seinen Elternbereich, was eine Menge Leistung bei der Arbeit an einem isolierten Teil Ihres HTML mit einem isolierten Bereich (hauptsächlich von einer Direktive) sparen kann). $ digest nimmt keinen Rückruf: Sie führen den Code aus, dann verdauen Sie. –