Vue学习—深入剖析v-model指令

一、v-model指令

可以在表单元素上创建双向数据绑定。即数据更新元素更新、元素更新数据也会更新。

本质上v-model为语法糖

元素类型 属性 事件
input[type=text]、textarea value input
input[checkbox]、input[radio] checked change
select value change

1.input

1.type=text 文本框

<div id="app">
    <input type="text" v-model='message'>
    <p>Message为:{
    
    {
    
     message }}</p>
</div>

<script>
    const vm = new  Vue({
    
    
        el: '#app',
        data: {
    
    
            message: ''
        }
    })
</script>

在这里插入图片描述
在这里插入图片描述

2.type=checkbox 复选框

1.单个复选框

绑定到布尔值,v-model=“Boolean”

<div id="app">
    <input type="checkbox" id="checkbox1" :checked=false>
    <label for="checkbox1">大哥</label>
    
    <input type="checkbox" id="checkbox2" v-model='checkbox'>
    <label for="checkbox2">二哥</label>
</div>
<script>
    const vm = new  Vue({
    
    
        el: '#app',
        data: {
    
    
            checkbox: true
        }
    })
</script>

在这里插入图片描述

2.多个复选框

<div id="app">
    <input type="checkbox" id="large" value="大哥" v-model="checkedNames">
    <label for="large">大哥</label>
    
    <input type="checkbox" id="second" value="二哥" v-model="checkedNames">
    <label for="second">二哥</label>
    
    <input type="checkbox" id="small" value="小弟" v-model="checkedNames">
    <label for="small">小弟</label>
    <br>
    <span>被选中的人有: {
    
    {
    
     checkedNames }}</span>
</div>

<script>
    const vm = new  Vue({
    
    
        el: '#app',
        data: {
    
    
            checkedNames: []
        }
    })
</script>

在这里插入图片描述

3.type=radio 单选框

<div id="app">
    <input type="radio" id="large" value="大哥" v-model="picked">
    <label for="large">大哥</label>
    <input type="radio" id="second" value="二哥" v-model="picked">
    <label for="second">二哥</label>
    <input type="radio" id="small" value="小弟" v-model="picked">
    <label for="small">小弟</label>
    <br>
    <span>被选中的人: {
    
    {
    
     picked }}</span>
</div>

<script>
    const vm = new  Vue({
    
    
        el: '#app',
        data: {
    
    
            picked: []
        }
    })
</script>

在这里插入图片描述

2.textarea

<div id="app">
    <p >多行文本为:{
    
    {
    
     message }}</p>
    <textarea v-model="message" placeholder="添加文本"></textarea>
</div>

<script>
    const vm = new  Vue({
    
    
        el: '#app',
        data: {
    
    
            message: ''
        }
    })
</script>

在这里插入图片描述

3.select

匹配的值为option中的汉字

1.单选

<div id="app">
    <select v-model="selected">
        <option>A</option>
        <option>B</option>
        <option>C</option>
    </select>
    <span>选择: {
    
    {
    
     selected === '请选择' ? '' : selected }}</span>
</div>

<script>
    const vm = new  Vue({
    
    
        el: '#app',
        data: {
    
    
            selected: '请选择'
        }
    })
</script>

在这里插入图片描述

注意: 如果 v-model 表达式的初始值未能匹配任何选项,<select> 元素将被渲染为“未选中”状态。在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发 change 事件。因此,可以提供一个值为空的禁用选项:

<div id="app">
    <select v-model="selected">
        <option :disabled='selected'>请选择</option>
        <option>A</option>
        <option>B</option>
        <option>C</option>
    </select>
    <span>选择: {
    
    {
    
     selected === '请选择' ? '' : selected }}</span>
</div>

在这里插入图片描述

2.多选

<div id="app">
    <select v-model="selected" multiple>
        <option>A</option>
        <option>B</option>
        <option>C</option>
    </select>
    <span>选择: {
    
    {
    
     selected }}</span>
</div>

在这里插入图片描述

4.修饰符

1.lazy

在默认情况下,v-model在每次input事件触发后将输入框的值与数据进行同步。如果要变为使用change事件同步可以添加lazy修饰符:

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >

2.number

自动将用户的输入值转为数值类型:

<input v-model.number="age" type="number">

在这里插入图片描述

3.trim

自动过滤用户输入的首尾空白字符

<input v-model.trim="msg">

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xun__xing/article/details/108424473
今日推荐