我有以下内容,我可以使用 v-if 指令切换表单(显示/隐藏)。当我切换表单时,我注意到了两个异常。
第一个异常是当我关闭表单然后重新打开它时,如果我添加评论,axios 正在提交多个请求?
其次,使用 v-if 指令完全破坏表单元素并重建它。这意味着一旦表单被切换即销毁和重建,我就无法在表单上使用任何 jquery 验证。
任何想法为什么 axios 在切换表单后会以这种方式表现?
我知道我可以使用 v-show 指令而不是 v-if 来防止表单元素被破坏,但是还有其他方法可以显示隐藏表单并仍然使用 jquery validate。如果我将表单移动到组件中,v-if 指令是否仍然具有相同的效果,即阻止我使用 jquery validate?
<div v-if="threadClosed">
This thread is now closed
</div>
<div v-else>
<form id="form" method="post" v-on:submit.prevent="add">
<textarea v-model="newComment" id="comment"></textarea>
<button type="submit">Submit</button>
</form>
</div>
<a href="#" v-on:click.prevent="close">close</a> | <a href="#" v-on:click.prevent="open">open</a>
<script>
var vm = new Vue({
el: '#root',
data: {
threadClosed: false,
newComment: '',
comments: [
{
"id": 2,
"comment": "blah...",
},
{
"id": 4,
"comment": "blah...",
}
{
"id": 6,
"comment": "blah...",
}
]
},
methods: {
add: function (comment) {
if (!$('#form').valid()) return false;
axios.post("api/thread/add", { comment: newComment })
.then((response) => {
$("#clear-dropzone").click();
this.comments.push(response.data);
});
},
close: function () {
axios.post("api/thread/close").then((response) => {
this.threadClosed = true
});
},
open: function () {
axios.post("api/thread/open").then((response) => {
this.threadClosed = false
});
}
}
});
</script>