在我的角度的应用程序,我正在寻找一种方法来处理所有服务器响应错误(弹出框显示错误消息),但允许控制器选择退出此行为,并做到这一点调用$资源时需要自己的错误处理。Angular选择退出拦截器行为
我打算只使用一个拦截器并让它处理所有的错误。像
$httpProvider.interceptors.push(function($q) {
return {
'responseError': function(rejection) {
displayMessage(rejection);
return $q.reject(rejection);
}
};
});
然后从控制器,如果我叫
$scope.widget = WidgetResource.get();
和服务器401错误响应的东西,用户将显示一条错误消息说,他们没有被授权。
但我想到有时控制器可能想要处理它自己的错误响应(即在给定的上下文中显示错误的更好方法)。什么样的方式可以选择离开拦截器?
另外,也许拦截器是不是这样做的方式。我还有什么可以用来处理这种横切关注并允许选择退出?
我明白你在说什么,让上下文特定的错误被理解上下文的代码处理。我会考虑这一点。我真正想要解决的问题是,确保每次使用$资源时都不重复相同的错误处理代码(向用户显示消息)。 – Planky
如果你把它放在拦截器中,你就不会重复。对?例如。在未经身份验证的用户的情况下,您可以在拦截器本身的某个共享服务中设置错误消息。 – manan
没错,所以一个更好的例子是服务器返回400个错误请求的时间为99%,我显示与错误消息相同的弹出窗口,但是1%的时间我不想弹出错误 - 我想以内联方式显示它。有没有一种方法让控制器说出“嘿拦截器,忽略我正在做的这个调用”,或者是这个效果。如果我在java中使用aspectj,我会截取一个注释来说,“截取所有的资源调用,除非它有一个@DontDisplayMe注解”。 – Planky