Vue 双向数据绑定
2024年9月18日...大约 3 分钟
基本用法
使用 Vue 的 v-model
指令,可以在表单元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素
单文件组件
<template>
<h4>文本框:{{ data.text }}</h4>
<h4>单选框:{{ data.radio }}</h4>
<h4>复选框:{{ data.checkbox }}</h4>
<h4>记住密码:{{ data.remember }}</h4>
<h4>下拉框:{{ data.select }}</h4>
<!-- 单向数据绑定:当数据发生改变时,视图会自动更新。但用户手动更改 input 的值,数据不会自动更新 -->
单向数据绑定:<input type="text" :value="data.text" />
<hr />
<!-- 双向数据绑定:当数据发生改变时,视图会自动更新。当用户手动更改 input 的值,数据也会自动更新 -->
<!-- 对于 <input type="text">,v-model 绑定的是 input 元素的 value 属性 -->
双向数据绑定:<input type="text" v-model="data.text" />
<hr />
<!-- 对于 <input type="radio">,v-model 绑定的是 input 元素的选中状态 -->
<input type="radio" v-model="data.radio" value="1" />写作
<input type="radio" v-model="data.radio" value="2" />画画
<hr />
<!-- 对于 <input type="checkbox">,v-model 绑定的是 input 元素的选中状态 -->
<input type="checkbox" v-model="data.checkbox" value="a" />写作
<input type="checkbox" v-model="data.checkbox" value="b" />画画
<input type="checkbox" v-model="data.checkbox" value="c" />运动
<hr />
<!-- 记住密码 -->
<input type="checkbox" v-model="data.remember" />记住密码
<hr />
<!-- 对于 <select>,v-model 绑定的是 select 元素的选中状态 -->
<select v-model="data.select">
<option value="">请选择</option>
<option value="A">写作</option>
<option value="B">画画</option>
<option value="C">运动</option>
</select>
</template>
<script setup>
import { ref } from "vue";
const data = ref({
text: "你好", //文本框
radio: "", //单选框
checkbox: [], //复选框
remember: false, //单个复选框-记住密码
select: "", //下拉框
});
</script>
HTML
<body>
<div id="app">
<h4>文本框:{{ data.text }}</h4>
<h4>单选框:{{ data.radio }}</h4>
<h4>复选框:{{ data.checkbox }}</h4>
<h4>记住密码:{{ data.remember }}</h4>
<h4>下拉框:{{ data.select }}</h4>
<!-- 单向数据绑定:当数据发生改变时,视图会自动更新。但用户手动更改 input 的值,数据不会自动更新 -->
单向数据绑定:<input type="text" :value="data.text" />
<hr />
<!-- 双向数据绑定:当数据发生改变时,视图会自动更新。当用户手动更改 input 的值,数据也会自动更新 -->
<!-- 对于 <input type="text">,v-model 绑定的是 input 元素的 value 属性 -->
双向数据绑定:<input type="text" v-model="data.text" />
<hr />
<!-- 对于 <input type="radio">,v-model 绑定的是 input 元素的选中状态 -->
<input type="radio" v-model="data.radio" value="1" />写作
<input type="radio" v-model="data.radio" value="2" />画画
<hr />
<!-- 对于 <input type="checkbox">,v-model 绑定的是 input 元素的选中状态 -->
<input type="checkbox" v-model="data.checkbox" value="a" />写作
<input type="checkbox" v-model="data.checkbox" value="b" />画画
<input type="checkbox" v-model="data.checkbox" value="c" />运动
<hr />
<!-- 记住密码 -->
<input type="checkbox" v-model="data.remember" />记住密码
<hr />
<!-- 对于 <select>,v-model 绑定的是 select 元素的选中状态 -->
<select v-model="data.select">
<option value="">请选择</option>
<option value="A">写作</option>
<option value="B">画画</option>
<option value="C">运动</option>
</select>
</div>
<script type="module">
import {
createApp,
ref,
} from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
createApp({
setup() {
const data = ref({
text: "你好", //文本框
radio: "", //单选框
checkbox: [], //复选框
remember: false, //单个复选框-记住密码
select: "", //下拉框
});
return {
data,
};
},
}).mount("#app");
</script>
</body>
修饰符
.lazy
:在 “change” 时而非 “input” 时更新。即当失去焦点或按下回车时,才会更新数据.number
:自动将用户的输入值转为数值类型.trim
:自动过滤用户输入的首尾空白字符