通过远程验证进行Angular 404处理

时间:2015-06-23 04:55:52

标签: angularjs angular-ui-router

我有一个角度应用程序,通过拦截器处理404s。具体做法是:

angular.module('app')
  .provider('AppInterceptor', function() {
    this.$get = function($q, $rootScope) {
      return {
        'responseError': function(error) {
          if (error.status === 401) {
            $rootScope.$broadcast('unauthorized', error);
          } else if (error.status === 404) {
            $rootScope.$broadcast('notFound', error);
          }

          return $q.reject(error);
        }
      };
    };
  });

然后我用以下方式收听此事件:

angular.module('app')
  .run(function($rootScope, $state){
    $rootScope.$on('notFound', function(error) {
      $state.go('http404');  // ui-router state change
    });
  });

这很有效。但是,我有一个注册页面,通过远程验证器指令依赖404错误来检查是否已经选择了所选用户名。远程验证器通过获取用户记录来验证用户名字段。因此,当用户选择尚未采用的有效用户名时,远程验证器会生成404,并且不幸的是,会触发未找到状态。

如何让这两个功能相互和平相处?

1 个答案:

答案 0 :(得分:0)

我通过让使用远程验证器的控制器监听$stateChangeStart事件来解决这个问题。当toState是我的preventDefault()状态时,我使用http404