我有一个角度应用程序,通过拦截器处理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,并且不幸的是,会触发未找到状态。
如何让这两个功能相互和平相处?
答案 0 :(得分:0)
我通过让使用远程验证器的控制器监听$stateChangeStart
事件来解决这个问题。当toState是我的preventDefault()
状态时,我使用http404
。