Vue指令之v-model详解

ops/2024/12/22 15:10:26/

v-model详解

v-model与表单

在Vue.js中,v-model是用于在表单元素和应用程序状态之间创建双向绑定的指令。它可以简化数据的输入和管理。以下是一些常见的用法:

1. 输入框 (input)

对于文本输入框,v-model可以同步用户输入的值与 Vue 实例的数据属性。

<div id="app"><input v-model="message" placeholder="输入一些文字"><p>输入的文字是: {{ message }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {message: ''}
})
</script>

2. 复选框 (checkbox)

对于复选框,v-model可以绑定到布尔值或数组。

单个复选框:

<div id="app"><input type="checkbox" v-model="checked"><p>复选框状态: {{ checked }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {checked: false}
})
</script>

多个复选框:

<div id="app"><input type="checkbox" v-model="checkedNames" value="Jack"> Jack<input type="checkbox" v-model="checkedNames" value="John"> John<input type="checkbox" v-model="checkedNames" value="Mike"> Mike<p>选中的名字: {{ checkedNames }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {checkedNames: []}
})
</script>

3. 单选按钮 (radio)

对于单选按钮,v-model可以绑定到一个字符串或数字值。

<div id="app"><input type="radio" v-model="picked" value="One"> One<input type="radio" v-model="picked" value="Two"> Two<p>选中的值: {{ picked }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {picked: ''}
})
</script>

4. 下拉菜单 (select)

对于下拉菜单,v-model可以绑定到一个字符串或数组值。

单选下拉菜单:

<div id="app"><select v-model="selected"><option disabled value="">请选择</option><option>A</option><option>B</option><option>C</option></select><p>选中的值: {{ selected }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {selected: ''}
})
</script>

多选下拉菜单:

<div id="app"><select v-model="selected" multiple><option>A</option><option>B</option><option>C</option></select><p>选中的值: {{ selected }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {selected: []}
})
</script>

5. 文本区域 (textarea)

<div id="app"><textarea v-model="message" placeholder="输入一些文字"></textarea><p>输入的文字是: {{ message }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {message: ''}
})
</script>

v-model 在不同类型的表单元素中表现稍有不同,但总体来说,它简化了表单数据的处理,使得数据绑定和更新变得非常直观和方便。

v-model与v-bind的联系与区别

v-modelv-bind 是 Vue.js 中的两个常用指令,它们在功能和使用场景上有一些不同。

v-model

v-model 用于在表单元素和 Vue 实例的数据之间创建双向数据绑定。它主要用于输入框、复选框、单选按钮、下拉菜单等表单元素。

用法:

<input v-model="message">

等价于:

<input :value="message" @input="message = $event.target.value">

v-model 的作用是在输入框的值改变时自动更新 Vue 实例中的数据,同时在 Vue 实例中的数据改变时自动更新输入框的值。它实现了双向数据绑定。

v-bind

v-bind 用于将元素的属性绑定到 Vue 实例的数据上。它可以绑定任意的 HTML 属性。

用法:

<img v-bind:src="imageSrc">

简写形式:

<img :src="imageSrc">

v-bind 的作用是在 Vue 实例中的数据改变时自动更新元素的属性值。它实现的是单向数据绑定,即从 Vue 实例的数据到元素属性。

联系和区别

  1. 功能不同:

    • v-model 实现双向数据绑定,主要用于表单元素。
    • v-bind 实现单向数据绑定,适用于任意 HTML 属性。
  2. 使用场景不同:

    • v-model 主要用于处理用户输入。
    • v-bind 用于绑定 HTML 属性,例如 srchrefclassstyle 等。
  3. 实现方式不同:

    • v-model 在内部相当于结合了 :value@input,简化了代码。
    • v-bind 仅绑定属性,不处理事件。

示例对比

使用 v-model 的例子:

<div id="app"><input v-model="message"><p>{{ message }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {message: ''}
})
</script>

使用 v-bind 的例子:

<div id="app"><img v-bind:src="imageSrc">
</div><script>javascript">
new Vue({el: '#app',data: {imageSrc: 'https://example.com/image.jpg'}
})
</script>

通过这些例子可以看出,v-model 更适合用于处理用户输入,而 v-bind 则适合用于动态更新元素的属性。

v-model 与v-bind结合实现动态绑定

在业务场景中,如果需要绑定动态数据,可以结合 v-modelv-bind 来实现。例如,我们可以使用 v-bind 来动态生成选项列表,同时使用 v-model 来绑定用户的选择。

1. 动态生成单选按钮

<div id="app"><div v-for="option in options" :key="option.id"><input type="radio" :id="option.id" :value="option.value" v-model="picked"><label :for="option.id">{{ option.text }}</label></div><p>选中的值: {{ picked }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {picked: '',options: [{ id: 1, value: 'One', text: '选项一' },{ id: 2, value: 'Two', text: '选项二' },{ id: 3, value: 'Three', text: '选项三' }]}
})
</script>

2. 动态生成复选框

<div id="app"><div v-for="option in options" :key="option.id"><input type="checkbox" :id="option.id" :value="option.value" v-model="checkedNames"><label :for="option.id">{{ option.text }}</label></div><p>选中的值: {{ checkedNames }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {checkedNames: [],options: [{ id: 1, value: 'Jack', text: '杰克' },{ id: 2, value: 'John', text: '约翰' },{ id: 3, value: 'Mike', text: '迈克' }]}
})
</script>

3. 动态生成下拉菜单

<div id="app"><select v-model="selected"><option v-for="option in options" :key="option.value" :value="option.value">{{ option.text }}</option></select><p>选中的值: {{ selected }}</p>
</div><script>javascript">
new Vue({el: '#app',data: {selected: '',options: [{ value: 'A', text: '选项 A' },{ value: 'B', text: '选项 B' },{ value: 'C', text: '选项 C' }]}
})
</script>

总结

通过结合 v-bindv-model,我们可以动态生成表单元素并进行数据绑定。这使得 Vue.js 在处理动态数据和复杂表单时变得非常灵活和强大。在这些例子中,v-bind 用于动态生成表单选项,而 v-model 则处理数据的双向绑定。


http://www.ppmy.cn/ops/85851.html

相关文章

会Excel就会sql?

如果你熟悉Excel,理解SQL(结构化查询语言,Structured Query Language)会相对容易,因为它们在某些功能上有着相似之处。SQL主要用于管理和操作数据库中的数据,而Excel则是电子表格软件,用于数据的组织、分析和可视化。下面我会用Excel的视角来帮你理解SQL的基本概念。 数…

26 Python序列结构

Python 中常用的序列结构有列表、元组、字典、字符串、集合等。 从是否有序这个角度看&#xff0c;Python 序列可以分为有序序列和无序序列&#xff1b;从是否可变来看&#xff0c;Python 序列可以分为可变序列和不可变序列两大类。 生成器对象和 range、map、enumerate、filte…

Mindspore框架循环神经网络RNN模型实现情感分类|(四)损失函数与优化器

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…

自定义QDialog使用详解

自定义QDialog使用详解 一、创建 QDialog 对象二、QDialog设置布局三、QDialog控制模态行为3.1 模态和非模态区别3.2 QDialog的模态使用四、使用 QDialogButtonBox五、处理对话框的结果六、使用 QDialog 的信号和槽QDialog是Qt框架中用于创建对话框窗口的基本类。对话框窗口通常…

快手可灵视频生成大模型全方位测评

快手视频生成大模型“可灵”&#xff08;Kling&#xff09;&#xff0c;是全球首个真正用户可用的视频生成大模型&#xff0c;自面世以来&#xff0c;凭借其无与伦比的视频生成效果&#xff0c;在全球范围内赢得了用户的热烈追捧与高度评价。截至目前&#xff0c;申请体验其内测…

Web开发:VUE3小白开发入门基础笔记

一、基本语法 1.click 后端路由&#xff1a;api/GetDataList 返回值&#xff1a;Value 前端要做的事&#xff1a; ①拿到Value值&#xff0c;传到a标签 ②a标签有一个按钮&#xff0c;每点击一下&#xff0c;Value的值加一。 前端需要用click语法 【代码】 <template>…

[RK3588][Android12] Android->OTA包超过4个G导致打包失败

测试平台 Platform: RK3588 OS: Android12 问题说明&#xff1a; 有的客户需要往系统中内置大量apk&#xff0c;这样就导致最终打包的OTA包超过4个G&#xff0c;从而导致打包OTA的时候报错&#xff1a;Zipfile size would require ZIP64 extensions 解决方法&#xff1a; 可能…

Java 扫雷游戏

程序分析 使用Java编写的扫雷游戏界面程序&#xff0c;主要内容总结如下&#xff1a; Frame类继承自JFrame&#xff0c;构建了扫雷游戏的界面。 包含文本框text、标签nowBomb和setBomb、按钮start、面板MenuPamel和bombPanel等组件。通过jbInit方法进行初始化设置&#xff0c;…