怎么在Vue中利用指令禁止反复发送请求

  介绍

今天就跟大家聊聊有关怎么在Vue中利用指令禁止反复发送请求,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1,在按钮点击发起请求后,弹个蒙层,显示个加载,等请求数据返回了将蒙层隐藏掉。

2,在按钮点击发起请求后,将按钮禁用掉,同样等数据返回了将按钮禁用解除。

以上是比较常见的2种方案。

实现上最简单的肯定是在需要的页面种在请求前和拿到数据后,单独处理。这种方案优点仅仅是简单,但是每个需要处理的页面都要单独写一串重复的代码,哪怕利用mixin也要多不少冗余代码。

如果是利用指令的方式仅仅需要在合适的地方加上个一条v-xxxx,其他都在指令的逻辑内统一处理。

以第二种方式为例:

clickForbidden。js

let  forbidClick =,空;   export  default  {   ,绑定(e) {   const 才能;el =, e;   let 才能;timer =,空;   forbidClick 才能=,(),=祝辞,{   ,,el.disabled =,真的;   ,,el.classList.add (& # 39; is-disabled& # 39;);   ,,timer =, setTimeout((),=祝辞,{   ,,el.disabled =,假;   ,,,el.classList.remove (& # 39; is-disabled& # 39;);   ,,,},3000);   ,,};   el.addEventListener才能(& # 39;点击# 39;,,forbidClick);   },   ,unbind () {   document.removeEventListener才能(& # 39;点击# 39;,,forbidClick);   },   };

指令的逻辑很简单,当按钮插入到DOM节点后,添加一个监听点击的事件,当按钮点击后,就将按钮禁用,并加上一个禁用样式,并在3 s后将该按钮解除禁用。

再考虑请求,以axios为例:

api。js

import  axios 得到& # 39;axios& # 39;;   export  baseURL =, & # 39; xxxx # 39;;   const  api =, axios.create ({   ,baseURL & lt; br 过滤数据=癴iltered"比;超时:3000年,,   });/*,记录当前请求是否完成,*/window.currentResq =, {   ,完成:没错,   ,配置:{},   };   api.interceptors.request.use(函数(配置),{   ,clearTimeout (resqTimer);   ,window.currentResq =, {   做才能:假的,   配置,才能   ,};   ,//接口请求时长超过3 s,则视为完成,不管请求结果成功或失败=,,resqTimer  setTimeout((),=祝辞,{   window.currentResq 才能=,{   ,,:,真的,   ,,,配置:{},   ,,};   ,},3000);   });   api.interceptors.response.use(函数(反应),{   {,const  config },=, window.currentResq;   {,const , url,方法,,data },=, response.config;   ,if  (config.url ===, url ,,, config.method ===, method ,,, config.data ===,数据),{   clearTimeout才能(resqTimer);   window.currentResq.done =,才能正确;   ,}   ,return 响应;   },,function (错误),{   ,return 误差;   });   ,   export  default  api;

用一个全局的currentResq来作为请求是否完成的标志。在axios请求拦截器种,将当前请求的数据记录在currentResq中,并将完成设置为假的。在axios响应拦截器中,约定url,方法,data3个参数一样时,就是当前currentResq中记录的请求返回数据,并将完成设置为真的。

同样的在指令逻辑中加入一个轮询监听currentResq的完成是否完成。

clickForbidden.js 

let  forbidClick =,空;   export  default  {   ,绑定(e) {   const 才能;el =, e;   let 才能;timer =,空;   forbidClick 才能=,(),=祝辞,{   ,,el.disabled =,真的;   ,,el.classList.add (& # 39; is-disabled& # 39;);   ,,timer =, setInterval((),=祝辞,{   ,,,if  (window.currentResq.done), {   ,,,,clearInterval(计时器);   ,,,,el.disabled =,假;   ,,,,el.classList.remove (& # 39; is-disabled& # 39;);   ,,,}   ,,,},500);   ,,};   el.addEventListener才能(& # 39;点击# 39;,,forbidClick);   },   ,unbind () {   document.removeEventListener才能(& # 39;点击# 39;,,forbidClick);   },   }; vue是什么

vue是一套用于构建用户界面的渐进式JavaScript框架,vue与其它大型框架的区别是,使用vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用vue可以采用单文件组件和vue生态系统支持的库开发复杂的单页应用。

看完上述内容,你们对怎么在vue中利用指令禁止反复发送请求有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

怎么在Vue中利用指令禁止反复发送请求