分享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 相关文章推荐
js 获取Listbox选择的值的代码
Apr 15 Javascript
动态加载script文件的两种方法
Aug 15 Javascript
jQuery实现div浮动层跟随页面滚动效果
Feb 11 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
Sep 08 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
Angular.js组件之input mask对input输入进行格式化详解
Jul 10 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
Sep 30 Javascript
js+canvas实现验证码功能
Sep 21 Javascript
vue基础之模板和过滤器用法实例分析
Mar 12 Javascript
详解Vue中的基本语法和常用指令
Jul 23 Javascript
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
PHP关联数组的10个操作技巧
2013/01/21 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
python双向链表实现实例代码
2013/11/21 Python
使用Python构建Hopfield网络的教程
2015/04/14 Python
Python中的函数作用域
2018/05/07 Python
详解用python写一个抽奖程序
2019/05/10 Python
python为什么要安装到c盘
2020/07/20 Python
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
写一个方法1000的阶乘
2012/11/21 面试题
前台接待的工作职责
2013/11/21 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
房地产销售计划书
2014/01/10 职场文书
会议接待欢迎词
2014/01/12 职场文书
工程资料员岗位职责
2014/03/10 职场文书
公司捐款倡议书
2014/05/14 职场文书
合作协议书范文
2014/08/20 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
幼儿教师辞职信
2015/02/27 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
MySQL窗口函数的具体使用
2021/11/17 MySQL
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL