解決方案:我這裏暫時使用的方案一
方案一:申明一個變量,點擊時置灰提交按鈕。等接口調用結束放開按鈕,就是你在點擊之後,ajax請求完成之前將那個按鈕禁止點擊
<template>
<div>
<!-- 其他代碼 -->
<button v-if="canSave" @click="save">提交</button>
<button v-else disabled>提交</button>
</div>
</template>
<script>
export default {
data(){
return {
canSave: true,
}
},
methods: {
save(){
if(!canSave){
return;
}
this.canSave = false;
// AJAX 結束後 this.canSave = true;
},
}
}
</script>
方案二:加防抖
我覺得“節流”和“去抖”應該結合在一起:間隔時間段內,只執行一次。
方案三:其實所有的接口請求都有這個需求,因此可以對ajax封裝一個代理層
代理層可以做兩個事情
緩存接口返回數據,可以緩存到sessionstorage,也可以緩存到內存,相同的請求先訪問緩存
給每個請求接口加狀態,未請求、請求中、已完成。未請求時去請求接口,同時把此接口狀態置爲請求中;請求中時再請求接口,將回調保存起來,接口數據返回以後,將數據存儲到緩存,一起回調;已完成時請求接口,直接從緩存中讀取數據,不再請求接口
這樣,不光是vue項目,也不光是post或者提交表單,所有的接口請求都具備了你需要的能力。