vue.js -- 双向绑定指令

193 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

v-model双向绑定指令

v-model 它负责监听用户的输入事件,从而更新数据,并对一些极端场景进行一些特殊处理。 v-model会忽略所有表单元素的value、checked、selected特性的初始值,它总是将vue实例中的数据作为数据来源。然后当输入事件发生时,实时更新vue实例中的数据。

表单中的双向绑定

输入框(input)

示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-model</title>
    <!-- 使用CDN引入Vue -->
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
    <script>
        const app = Vue.createApp({
            data(){
                return {
                    content: "双向绑定指令"
                }
            },
            template:`
            <div>
                <div>{{content}}</div>
                <input v-model="content"/>
            </div>
            `
        })
        const vm = app.mount('#root');
    </script>
</body>
</html>

页面效果: 在这里插入图片描述 在这里插入图片描述

在输入框中输入v-model,content中内容改变,在控制台改变content,input框内容也发生改变。说明content和input框的内容是双向绑定的。

多行文本输入框(textarea)

示例代码:

        const app = Vue.createApp({
            data(){
                return {
                    content: "双向绑定指令"
                }
            },
            template:`
            <div>
                <div>{{content}}</div>
                <textarea v-model="content"/>
            </div>
            `
        })

页面效果: 在这里插入图片描述 在这里插入图片描述

textarea 和 input 同理

单选框(input-radio)

代码演示:

      const app = Vue.createApp({
            data(){
                return {
                    content: ""
                }
            },
            template:`
            <div>
                {{content}}
                张三<input type="radio" v-model="content" value="张三"/>
                李四<input type="radio" v-model="content" value="李四"/>
            </div>
            `
        })

页面效果: 在这里插入图片描述 在这里插入图片描述

多选框(input-checkbox)

多选框双向绑定

代码演示:

    const app = Vue.createApp({
            data(){
                return {
                    content: true
                }
            },
            template:`
            <div>
                {{content}}
                张三<input type="checkbox" v-model="content"/>
                李四<input type="checkbox" v-model="content"/>
            </div>
            `
        })

页面效果: 在这里插入图片描述 在这里插入图片描述

多选框数据填充

示例代码:

		const app = Vue.createApp({
            data(){
                return {
                    content: []
                }
            },
            template:`
            <div>
                {{content}}
                张三<input type="checkbox" v-model="content" value="张三"/>
                李四<input type="checkbox" v-model="content" value="李四"/>
            </div>
            `
        })

页面效果: 在这里插入图片描述 在这里插入图片描述

多选框自定义属性

代码演示:

		const app = Vue.createApp({
            data(){
                return {
                    content: "Y"
                }
            },
            template:`
            <div>
                {{content}}
                <input type="checkbox" v-model="content" true-value="Y" false-value="N"/>
            </div>
            `
        })

页面效果: 在这里插入图片描述 在这里插入图片描述

选择列表(select)

单选列表

代码演示:

 		const app = Vue.createApp({
            data(){
                return {
                    content: ""
                }
            },
            template:`
            <div>
                {{content}}
                <select v-model="content">
                    <option disabled value="">请选择内容</option>
                    <option value="张三">张三</option>
                    <option value="李四">李四</option>
                    <option value="王五">王五</option>
                </select>
            </div
            `
        })

页面效果:

在这里插入图片描述

多选列表

代码演示:

		const app = Vue.createApp({
            data(){
                return {
                    content: []
                }
            },
            template:`
            <div>
                {{content}}
                <select v-model="content" multiple>
                    <option value="张三">张三</option>
                    <option value="李四">李四</option>
                    <option value="王五">王五</option>
                </select>
                
            </div
            `
        })

页面效果: 在这里插入图片描述

表单修饰符

.lazy

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 。 使用. lazy 修饰符可以使input失去焦点时进行数据进行同步。

代码演示:

        const app = Vue.createApp({
            data(){
                return {
                    content: "Y"
                }
            },
            template:`
            <div>
                {{content}}
                <input v-model.lazy="content" />
            </div>
            `
        })

页面效果: 在这里插入图片描述 失去焦点后 在这里插入图片描述

.number

使用 .number修饰符会自动将用户的输入值转为数值类型。

示例代码:

     const app = Vue.createApp({
            data(){
                return {
                    content: "666"
                }
            },
            template:`
            <div>
                {{typeof content}}
                <input v-model.number="content" />
            </div>
            `
        })

页面效果:

初始状态 在这里插入图片描述 输入88后 在这里插入图片描述

.trim

使用 .trim修饰符会自动过滤用户输入数据前后的空格

代码演示:

  		const app = Vue.createApp({
            data(){
                return {
                    content: "hello Vue.js!"
                }
            },
            template:`
            <div>
                {{content}}
                <input v-model.trim="content" />
            </div>
            `
        })

页面效果:

在这里插入图片描述

本文到此结束

如果大家还有什么其他想法,欢迎在评论区交流!