今天就跟大家聊聊有关怎么在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中利用指令禁止反复发送请求有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。