vue.js实战学习——表单与v-model

Posted sxdct

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue.js实战学习——表单与v-model相关的知识,希望对你有一定的参考价值。

注:此内容摘抄自:梁灏的《Vue.js实战》

注:记得要引入vue.js才能运行哦,文章中贴出的代码直接复制是不行的,html css js 都放在了一起,而且也没有引用vue.js。

基本用法

1.表单控件在实际业务较为常见,比如单选、多选、下拉选择、输入框等,用他们可以完成数据的录入、校验、提交等。Vue.js提供了v-model指令,用于在表单类元素上的双向绑定数据。

<div class="app1">
    <input type="text" v-model="message" placeholder="输入..." />
    <p>输入的内容是:{{message}}</p>
</div>

var app1=new Vue({
    el:‘.app1‘,
    data:{
        message:‘‘
    }
});

对于文本域textarea也是同样的用法。

2.使用v-model时,如果是用中文输入法输入中文,一般在没有选定词组前,也就是在拼音阶段,Vue是不会更新数据的,当敲下汉字时才会触发更新。如果希望总是实时更新,可以用@input代替v-model。事实上,v-model也是一个特殊的语法糖,只不过它会在不同的表单上智能处理。

<div class="app2">
    <input type="text" @input="handleInput" placeholder="输入..." />
    <p>输入的内容是:{{message}}</p>
</div>

var app2=new Vue({
    el:‘.app2‘,
    data:{
        message:‘‘
    },
    methods:{
        handleInput:function(e){
            this.message=e.target.value;
        }
    }
});

3.单选按钮

单选按钮在单独使用时,不需要v-model,直接使用v-bind绑定一个布尔类型的值,为真时选中,为假时不选。

<div class="app3">
    <input type="radio" name="" id="button1" value="" :checked="picked" />
    <label for="button1">单选按钮</label>
</div>

var app3=new Vue({
    el:‘.app3‘,
    data:{
        picked:true
    }
});

如果是组合使用来实现互斥选择效果,就需要v-model配合value来使用:

<div class="app4">
    <input type="radio" name="" id="html" value="html" v-model="picked" />
    <label for="html">HTML</label>
    <br />
    <input type="radio" name="" id="js" value="js" v-model="picked" />
    <label for="js">JS</label>
    <br />
    <input type="radio" name="" id="css" value="css" v-model="picked" />
    <label for="css">CSS</label>
    <br />
    <p>选择的项是:{{picked}}</p>
</div>

var app4=new Vue({
    el:‘.app4‘,
    data:{
        picked:‘js‘
    }
});

4.复选框

复选框也分单独使用和组合使用,不过用法稍与单选不同。复选框单独使用时,也是用v-model来绑定一个布尔值。

<div class="app5">
    <input type="checkbox" name="checked" id="checked" value="" v-model="checked" />
    <label for="checked">选择状态:{{checked}}</label>
</div>

var app5=new Vue({
    el:‘.app5‘,
    data:{
        checked:false
    }
});

组合使用时,也是v-model与value一起,多个勾选框都绑定到同一个数组类型的数据,value的值在数组当中,就会选中这一项。这个过程也是双向的,在勾选时,value的值也会自动push到这个数组中:

<div class="app6">
    <input type="checkbox" name="" id="html" value="html" v-model="checked" />
    <label for="html">HTML</label>
    <br />
    <input type="checkbox" name="" id="js" value="js" v-model="checked" />
    <label for="js">JS</label>
    <br />
    <input type="checkbox" name="" id="css" value="css" v-model="checked" />
    <label for="css">CSS</label>
    <br />
    <p>选择的项是:{{checked}}</p>
</div>

var app6=new Vue({
    el:‘.app6‘,
    data:{
        checked:[‘html‘,‘css‘]
    }
});

5.选择列表

选择列表局势下拉选择器,也是常见的表单控件,同样也分为单选和多选两种方式。

<div class="app7">
    <select name="" v-model="selected">
        <option>html</option>
        <option value="js">JS</option>
        <option>CSS</option>
    </select>
    <p>选择的项是:{{selected}}</p>
</div>

var app7=new Vue({
    el:‘.app7‘,
    data:{
        selected:‘html‘
    }
});

<option>是备选项,如果含有value属性,v-model就会优先匹配value的值;如果没有,就会直接匹配<option>的text,比如选中第二项时,selected的值是js而不是JS。

给<selected>添加属性multiple就可以多选了,此时v-model绑定的是一个数组,与复选框用法类似。(本人觉得太丑了,就不列举了。而且好像只有一开始默认值是多选,然后自己再点击就是单选了)

在业务中,<option>经常用v-for动态输出,value和text也是用v-bind来动态输出的。

<div class="app9">
    <select name="" v-model="selected">
        <option v-for="option in options" :value="option.value">{{option.text}}</option>
    </select>
    <p>选择的项是:{{selected}}</p>
</div>

var app9=new Vue({
    el:‘.app9‘,
    data:{
        selected:‘html‘,
        options:[
            {
                text:‘HTML‘,
                value:‘html‘
            },
            {
                text:javascript,
                value:‘js‘
            },
            {
                text:‘CSS‘,
                value:‘css‘
            }
        ]
    }
})

虽然用选择列表<select>控件可以很简单的完成下拉选择的需求,但是在实际业务中反而不常用,因为它的样式依赖平台和浏览器,无法统一,也不太美观,功能也有限,比如不支持搜索,所以常见的解决方案是用div模拟一个类似的控件。

 

以上是关于vue.js实战学习——表单与v-model的主要内容,如果未能解决你的问题,请参考以下文章

vue.js的学习总结

Vue.js学习笔记 - 修饰符

HTML 表单是个谜

验证错误 Form Request v-model Laravel vue.js

vue_表单控件

表单与v-model