添加到您的按钮 :disabled="!readyToSend" 其中 readyToSend 可以由您的数据函数或计算的属性返回。
在提交表单之前将此变量设置为 false,在从您的 API 接收数据后,将其重置为 true。
在以下示例中,我选择让 readyToSend 成为一个计算比例,如果表单有效且进程未等待 API 响应,它将返回 true。
完整的Code Pen example is here
html 文件:
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>example</title>
</head>
<body>
<div id="app">
<h2>{{ message }}</h2>
<form @submit.prevent>
<input type="text" v-model="dataToSend" placeholder="Something to send">
<button type="button" :disabled="!readyToSend" @click="send">Send</button>
</form>
</div>
</body>
</html>
javascript:
var vm = new Vue({
el: '#app',
data: function(){
return {
message: "please enter your message and click on send.",
dataToSend: "",
sentAndWaiting: false,
}
},
methods:{
send: async function(){
this.sentAndWaiting = true;
// Send Data Here
this.message = "sending....";
try{
let response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
let jsonResponse = await response.json();
}
catch(e){
this.message = e.message;
}
// reponse received ... do Something with it
this.reponseReceived();
},
reponseReceived: function(){
this.sentAndWaiting = false;
this.message = "Ok. Got The response.";
}
},
computed:{
readyToSend: function(){
return this.dataToSend.length > 0 && !this.sentAndWaiting;
}
},
});
在我的浏览器中,我必须通过开发工具进行测试,并将我的互联网连接限制为 GPRS 并禁用缓存:
Screenshot DevTools