vue3表单中v-model指令的使用

可以用 v-model 指令在表单控件元素上创建双向数据绑定

一,input

如下示例:让msg值与input框绑定,当我改变input框的内容,外面内容也会随之改变
用了v-model 绑定数据,input就不用写value属性

    const app = Vue.createApp({
        data() {
            return {
                msg:'hello vue3'
            }
        },
        template: `
            <div>
                {{msg}}
                <input v-model = "msg"/>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

打印结果:


image.png

二,textarea

示例如下:

    const app = Vue.createApp({
        data() {
            return {
                msg:'hello vue3'
            }
        },
        template: `
            <div>
                {{msg}}
                <textarea v-model = "msg"></textarea>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

打印结果:


image.png

三,复选框 checkbox

示例如下:
checkbox时,msg值是true 或者false,true是选中 false是未勾选

    const app = Vue.createApp({
        data() {
            return {
                msg:false
            }
        },
        template: `
            <div>
                {{msg}}
                <input v-model = "msg" type ="checkbox"/>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

打印结果:


image.png

多个checkbox时,msg值可写成数组,用来存选中的数据,写上value值,能够知道数组内存什么内容
示例如下:

    const app = Vue.createApp({
        data() {
            return {
                msg:[]
            }
        },
        template: `
            <div>
                
                <div>{{msg}}</div>
                roadbicycle <input v-model = "msg" type ="checkbox" value ="roadbicycle"/>
                mountainbike <input v-model = "msg" type ="checkbox" value ="mountainbike"/>
                electrocar <input v-model = "msg" type ="checkbox" value ="electrocar"/>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

结果:


image.png

checkbox是用 true或者false来表示的,如果想改变true或者false的值 写法如下:

    const app = Vue.createApp({
        data() {
            return {
                msg:'我被选中了'
            }
        },
        template: `
            <div>
                
                {{msg}}
               <input type="checkbox" v-model ="msg" true-value ="我被选中了" false-value ="没被选中" />
            </div>
            `
    });
    const vm = app.mount('#contentMain');

目前会出现的问题:当msg里的值默认为是"我被选中了"的时候,显示的是未选中状态,如下图:可能是vue支持的问题,


image.png

改成"没被选中" 不会出问题,如下代码:


    const app = Vue.createApp({
        data() {
            return {
                msg:'没被选中'
            }
        },
        template: `
            <div>
                
                {{msg}}
               <input type="checkbox" v-model ="msg" true-value ="我被选中了" false-value ="没被选中" />
            </div>
            `
    });
    const vm = app.mount('#contentMain');

四,单选框 radio

用法与checkbox一样,radio是单选 所以用字符串进行存储即可 示例如下:

     const app = Vue.createApp({
        data() {
            return {
                msg:''
            }
        },
        template: `
            <div>
                
                <div>{{msg}}</div>
                roadbicycle <input v-model = "msg" type ="radio" value ="roadbicycle"/>
                mountainbike <input v-model = "msg" type ="radio" value ="mountainbike"/>
                electrocar <input v-model = "msg" type ="radio" value ="electrocar"/>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

结果:


image.png

五,select

基本写法:

    const app = Vue.createApp({
        data() {
            return {
                msg:''
            }
        },
        template: `
            <div>
                
                {{msg}}
                <select v-model ="msg">
                    <option disabled value = ''>请选择数字</option>
                    <option>1</option>
                    <option>2</option>
                    <option>3</option>
                </select>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

select做多选可给select加入 multiple 属性 按住ctrl键,可进行多选
如果有很多数据情况下,建议用v-for循环方式,示例如下:

    const app = Vue.createApp({
        data() {
            return {
                msg:[],
                options:[
                    {tit:'1',value:{value:'a'}},
                    {tit:'2',value:{value:'b'}},
                    {tit:'3',value:{value:'c'}}]
            }
        },
        template: `
            <div>
                
                {{msg}}
                <select v-model ="msg" multiple>
                    <option v-for = "item in options" :value ="item.value">{{item.tit}}</option>
                </select>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

结果:


image.png

六,修饰符

lazy修饰符,

当input输入完内容失去焦点的时候,msg内容才发生变化,示例如下:

    const app = Vue.createApp({
        data() {
            return {
                msg:'没被选中'
            }
        },
        template: `
            <div>
                {{msg}}
               <input v-model.lazy ="msg"/>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

number修饰符:

可做类型的转换,如把字符串转为number类型, 示例如下:

    const app = Vue.createApp({
        data() {
            return {
                msg:'没被选中'
            }
        },
        template: `
            <div>
                {{msg}}
               <input v-model.number ="msg" type="number"/>
            </div>
            `
    });
    const vm = app.mount('#contentMain');

trim:

去除数据前后的空格,示例如下:

    const app = Vue.createApp({
        data() {
            return {
                msg:'没被选中'
            }
        },
        template: `
            <div>
                {{msg}}
               <input v-model.trim ="msg"/>
            </div>
            `
    });
    const vm = app.mount('#contentMain');
src=http___p0.ssl.qhimgs4.com_t01d7887d898734a0a2.gif&refer=http___p0.ssl.qhimgs4.gif
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容