2016-01-20 166 views
0

ngMessage用於在表單驗證失敗時顯示錯誤消息。但是現在需要這個div在http 500發生錯誤時顯示。當http錯誤發生時,我可以得到相應的錯誤信息,但是當時不知道如何顯示ngMessage div。Angular如何在登錄頁面上顯示http錯誤消息

HTML:

<div class="error_msg" ng-if="form_login.$submitted" ng-messages="form_login.$error" flex="initial"> 
    <div class="alertmsg" ng-message="required" flex">{{errormsg | i18next}}</div> 
</div> 

控制器:

loginModule.controller("loginController", ['$http', '$window', '$rootScope', '$scope', '$location', 'authenticationService', '$i18next', function($http, $window, $rootScope, $scope, $location, authenticationService, $i18next){ 

    $scope.newclass = false; 
    $scope.errormsg = 'login.alertmsg'; 
    $scope.login = function(){ 
     if($scope.form_login.$invalid){ 
      return false; 
     }else{ 
      $scope.newclass = true; 
      $scope.dataloading = true; 
      authenticationService.login($scope.username, $scope.password, 
       function(response){ 
       if(response.data.status_code == 200){ 
        $window.location.href = 'view/home.html'; 
       }else if(response.data.status_code == 500){ 
        $scope.errormsg = 'error_code' + '.' +response.data.payload.error_code; 
        console.log($scope.errormsg); 
        $scope.dataloading = false; 
        $scope.newclass = false; 
       } 
      }, 
       function(response){ 
        $scope.dataloading = false; 
        $scope.newclass = false; 

      }); 
     } 
    }; 
}]); 

更新: 如果我只使用納克 - 如果,既可以顯示形式驗證消息和HTTP錯誤消息,但沒有ngMessage,形式驗證消息將不會是動態的

+1

您需要做的是將您的身份驗證服務用作異步驗證程序。異步驗證已添加到AngularJS 1.3。 – georgeawg

回答

0

您可能希望處理所有XHR的非200 HTTP,而不僅用於驗證。 您可以通過使用http響應攔截器來執行此操作,該攔截器可以評估每個角度XHR的HTTP代碼。

您可能需要使用除登錄成功或登錄錯誤之外的其他功能中的消息。您可以爲這些消息創建控制器,如登錄成功,失敗,用戶修改成功,失敗......您可以通過偵聽消息控制器中的事件來完成此操作。

然後,您可以從HTTP響應攔截器觸發事件​​,以通知消息控制器根據HTTP代碼顯示消息。 Finnaly,如果你想以不同的方式處理HTTP錯誤代碼來驗證身份,你可以使用一個因子分別$ http和他自己的http響應攔截器,將你想要的消息發送給消息控制器。

相關問題