2016-01-20 121 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响应拦截器,将你想要的消息发送给消息控制器。

相关问题