分享Angular http interceptors 拦截器使用(推荐)


Posted in Javascript onNovember 10, 2019

AngularJS 简介

AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。

AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。

拦截器

在开始创建拦截器之前,一定要了解 $q和延期承诺api

出于全局错误处理,身份验证或请求的任何同步或异步预处理或响应的后处理目的,希望能够在将请求移交给服务器之前拦截请求,并在将请求移交给服务器之前将响应拦截发起这些请求的应用程序代码-拦截器利用promise api满足同步和异步预处理的需求。

拦截器是$httpProvider通过将它们添加到$httpProvider.interceptors数组而向其注册的服务工厂。调用工厂并注入依赖项(如果指定),并返回拦截器。

有两种拦截器(和两种拒绝拦截器):

  • request:拦截器通过http config对象调用。该函数可以自由修改config对象或创建新对象。函数需要config直接返回对象,或者包含config或新config对象的Promise。
  • requestError:当先前的拦截器抛出错误或被拒绝解决时,拦截器将被调用。
  • response:拦截器通过http response对象调用。该函数可以自由修改response对象或创建新对象。函数需要response直接返回对象,或者作为包含response或新response对象的承诺。
  • responseError:当先前的拦截器抛出错误或被拒绝解决时,拦截器将被调用。
// register the interceptor as a service
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
 return {
  // optional method
  'request': function(config) {
   // do something on success
   return config;
  },
  // optional method
  'requestError': function(rejection) {
   // do something on error
   if (canRecover(rejection)) {
    return responseOrNewPromise
   }
   return $q.reject(rejection);
  },
  // optional method
  'response': function(response) {
   // do something on success
   return response;
  },
  // optional method
  'responseError': function(rejection) {
   // do something on error
   if (canRecover(rejection)) {
    return responseOrNewPromise
   }
   return $q.reject(rejection);
  }
 };
});
$httpProvider.interceptors.push('myHttpInterceptor');
// alternatively, register the interceptor via an anonymous factory
$httpProvider.interceptors.push(function($q, dependency1, dependency2) {
 return {
  'request': function(config) {
    // same as above
  },
  'response': function(response) {
    // same as above
  }
 };
});

此处有一个坑,在push时,提示未定义拦截器,因为$httpProvider在config 拦截器时,拦截器service 还不能找到,

可以将拦截器service 定义在config依赖的模块中使用。

以上内容是小编给大家分享Angular http interceptors 拦截器使用,希望对大家有所帮助!

Javascript 相关文章推荐
JavaScript自定义事件介绍
Aug 29 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
基于jQuery Ajax实现上传文件
Mar 24 Javascript
原生javascript实现分页效果
Apr 21 Javascript
用原生 JS 实现 innerHTML 功能实例详解
Apr 03 Javascript
javascript数据类型中的一些小知识点(推荐)
Apr 18 Javascript
js中arguments对象的深入理解
May 14 Javascript
解决layer.msg 不居中 ifram中的问题
Sep 05 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
Sep 23 Javascript
json_decode 索引为数字时自动排序问题解决方法
Mar 28 Javascript
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
vue-父子组件和ref实例详解
Nov 10 #Javascript
vue $set 给数据赋值的实例
Nov 09 #Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
Nov 09 #Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
Nov 09 #Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
Nov 09 #Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 #Javascript
Vue实现点击按钮复制文本内容的例子
Nov 09 #Javascript
You might like
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
Angular封装表单控件及思想总结
2019/12/11 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python使用django框架实现多人在线匿名聊天的小程序
2017/11/29 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
枚举与#define宏的区别
2014/04/30 面试题
数学国培研修感言
2014/02/13 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
旷课检讨书范文
2015/01/27 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL