vue.js - 2 方式绑定在 vuejs 中无法正常工作
问题描述
我以这种方式定义了一个 vuejs 组件:
<template>
<form @submit.prevent="submit">
<textarea id="content" cols="30" rows="10" v-model="content">{{ content }}</textarea>
<button class="btn btn-lg btn-success" type="submit" @click="send()">
Send content
</button>
</form>
</template>
<script>
export default {
data() {
return {
content: '// Initial content'
}
},
methods: {
send() {
console.log('Content', this.content);
},
submit() {
return false;
}
},
mounted() {
console.log('Template init ', this.content);
}
}
</script>
当我单击发送时,发送方法按预期输出文本区域的内容。但是当我用 jquery 改变 textarea 的内容时:
$('#content').val(content);
并点击发送,它不会更新模板中的内容。“发送”输出旧值。
有人可以向我解释这里有什么问题吗?
解决方案
v-model
正在侦听输入事件以触发更改其绑定变量的值。
v-model 在内部使用不同的属性并为不同的输入元素发出不同的事件:
- text 和 textarea 元素使用 value 属性和输入事件;
- 复选框和单选按钮使用选中属性和更改事件;
- 选择字段将值用作道具并将更改用作事件。
使用 JQuery val() 方法选择元素并更改值不会触发v-model
正在侦听的事件,因此绑定变量的值不会更改/更新。
如果您绝对必须使用 JQuery 来更改内容,您可以手动触发一个事件,该事件也可能触发v-model
绑定更新:
$('#content').val(content).trigger('input');
推荐阅读
- c - realloc 调用后内存泄漏
- c# - 在 Unity C# 中使用播放器移动对象的最佳方式是什么?
- clang - Clang/LLVM:-fbasic-block-sections=labels 应该与 LTO 一起使用吗?
- android - 如何删除自定义边距/填充并将其设置回读取 XML 布局中定义的内容
- python - 如何在 python 中保存 C++ 指针以便稍后再次传递?
- python - 如何去除乳房 X 光检查标签伪影
- c - STM32 CAN RX中断未触发
- wordpress - WordPress主题开发小部件问题
- xsl-fo - Apache FOP:阿拉伯字形之间的空格
- php - Wordpress,如何使用子主题功能 php 覆盖主题小部件?