0

在 Angular js 中真的找不到关于 http 拦截器的好文档。在处理由ng-includei 引起的错误时,可以使用以下方法进行拦截responseError

    app.config(function ($httpProvider) {
    $httpProvider.interceptors.push('templateInterceptor');
});

// register the interceptor as a service
app.factory('templateInterceptor', function($q) {
  return {
    'responseError': function(rejection) {
       var isTemplate = !!rejection.config.url.match(/^content/g);
       if (isTemplate) {
         // here we add error message, but how this message appesrs in the place of ng-include
         rejection.data = '<div><template-error url="\''+ (rejection.config.url) + '\'"><strong>Error from interceptor.</strong></template-error></div>';
         return rejection;
       } else {
         return $q.reject(rejection);
       }
    }
  }
});

这段代码取自这个问题how to catch angular ng-include error。我不明白,拦截器是如何工作的?他们必须返回什么?如何使用rejection传递给responseError拦截器的参数?在属性中用于将错误消息包含到失败指令的位置rejection,这是如何工作的?datang-include

4

1 回答 1

1

如果您有电话$http,例如

$http(....).then(function(results) {
  // Success callback
}, function(error) {
  // Error callback
});

服务器以错误响应,然后 responseError 拦截器将在运行成功或错误回调之前被调用。

  • 如果最终拦截器返回任何不是promise的值,那么从调用代码的角度来看,调用$http成功了,将执行成功回调,将返回值作为results参数传入

  • 如果最终的拦截器返回了一个通过值解析的promise,那么类似于上面的情况,从调用代码的角度来看,调用$http成功了,将执行成功回调,传入解析的值作为results论据。

  • 如果最终的拦截器返回一个因错误而被拒绝的promise,那么从调用代码的角度来看,调用$http不成功,将执行错误回调,并将被拒绝的错误作为参数error传入。

该指令将把成功调用结果中的键ngInclude注入到页面中。https://stackoverflow.com/a/20838764/1319998上的代码将错误调用from转换为成功,其中错误消息的 html 作为结果中的键。data$http$httpngIncludedata

于 2014-10-26T21:44:15.070 回答