Vue表单输入绑定v-model

表单输入绑定

基础用法 v-model

  在表单 <input><textarea> 及 <select> 元素上创建双向数据绑定,它负责监听用户的输入事件以更新数据。

v-model 会忽略所有表单元素的 valuecheckedselected attribute 的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的 data 选项中声明初始值。

 

文本

 <input type="text" v-model="msg" value="abcd">{{msg}}
 data: {
                msg:'文本',
            },

运行效果图

 

 修改input框的内容,data的msg值也被改变。

 

 

 

 

多行文本

注意多行文本中,需要给标签加入style="white-space: pre-line;"的样式,否则不会自动换行。

 <textarea v-model="textMsg"></textarea>{{textMsg}}
data: {
                msg:'文本',
                textMsg:'多行文本'
            },

运行效果图:

1  加了样式,输出会自动换行

 而且修改文本内容,data的textMsg值也被改变。

2  不加样式 不会换行

 

 

 复选框

      <input type="checkbox" id="a" v-model="duoxuan" value="A">
        <label for="a">A</label>
        <input type="checkbox" id="b" v-model="duoxuan" value="B">
        <label for="b">B</label>
        <input type="checkbox" id="c" v-model="duoxuan" value="C">
        <label for="c">C</label>
        ------{{duoxuan}}
 data: {
                duoxuan:[]
            },

 

运行效果图:

1、不操作

 

 

 2、勾选A

 

 

 3、在不刷新的情况下,勾选剩余的BC

 

 

 

当复选框没有value属性或属性的值为空时,

我把A的value值设置为"",BC删除value属性。

     <input type="checkbox" id="a" v-model="duoxuan" value="">
        <label for="a">A</label>
        <input type="checkbox" id="b" v-model="duoxuan" >
        <label for="b">B</label>
        <input type="checkbox" id="c" v-model="duoxuan" >
        <label for="c">C</label>
        ------{{duoxuan}}
 data: {
                duoxuan:[]
            },

运行效果图:

1勾选A:

 

 

2 勾选B:

只勾选B,发现B和C同时被勾选,并且数组传入一个null,而不是两个。

只勾选C的情况也和上面一样。

 

3 勾选A和B:

 

 

 

验证:

<button @click="a">查看类型</button>
 methods: {
                a(){
                    console.log(typeof vm.duoxuan[0])
                }
            }

运行结果:

1勾选A ,类型输出为string

 

 2 勾选B   输出object

 

 

 结论:

A是string类型,B和C不设置value返回一个null对象。

 

 

当把data里的duoxuan属性由[]改为{}或者""时,

     <input type="checkbox" id="a" v-model="duoxuan" value="A">
        <label for="a">A</label>
        <input type="checkbox" id="b" v-model="duoxuan" value="B">
        <label for="b">B</label>
        <input type="checkbox" id="c" v-model="duoxuan" value="C">
        <label for="c">C</label>
        ------{{duoxuan}}
data: {
                duoxuan:{}
            },

 

运行效果图:

1 打开页面 什么也不操作

 

 2点击A  

三个√同时取消,并且值由{}变为false。

无论点击ABC中的某一项,都是会同时勾选或者取消勾选。

 

 2 再次点击

值变为true。

 

 

 

单选按钮

<input type="radio" id="x" v-model="pick" value="A">
        <label for="a">A</label>
        <input type="radio" id="y" v-model="pick" value="B">
        <label for="b">B</label>
        <br>
        <span>Pick: {{ pick }}</span>
data:{
    pick:''
}

 

 

运行结果:

1选B

2选A

 

下拉选择框

1 单选

 <select name="" id="" v-model="selected">
           <option value="student">学生</option>
           <option value="teacher">老师</option>
           <option value="driver">司机</option>
           <option value="lawer">律师</option>
        </select>
        <br>
        <p>{{selected}}</p>
data:{
 selected:'',
}

 

运行效果图:

1 什么也不操作,默认为空

2 选择其中一个,输出的是value的值。

 

把律师的value属性整个删除。

 <option >律师</option>

运行效果图:

1输出的值变为了标签内的文本内容

设置value,但是不输入值。

<option value="">律师</option>

运行效果图:

1 默认选中了律师,然后输出了""空串。

 

 

可以在第一项设置一个disabled,兼容ios。

<select name="" id="" v-model="selected">
           <option value="" disabled >请选择</option>
           <option value="student">学生</option>
           <option value="teacher">老师</option>
           <option value="driver">司机</option>
           <option value="">律师</option>
        </select>
        <br>
        <p>{{selected}}</p>

 

 

多选下拉选择框

加个multiple属性 ,并且v-model绑定到数组

注意:多选需要按住ctrl才可以。不然还是单选。

 <select name="" id="" multiple v-model="moreselected">
            <option value="" disabled >请选择</option>
           <option value="student">学生</option>
           <option value="teacher">老师</option>
           <option value="driver">司机</option>
           <option value="">律师</option>
        </select>
        <br>
        <p>{{moreselected}}</p>
data:{
moreselected:[],
}

 

运行效果图:

按住ctrl进行多选

 但是有时我们可能想把值绑定到 Vue 实例的一个动态 property 上,这时可以用 v-bind 实现,并且这个 property 的值可以不是字符串。

 

 

 

值绑定

复选框

可以给复选框指定true-value和false-value的值,他们会在返回true和false的时候给到相应的值。

 <input
  type="checkbox"
  v-model="toggle"
  true-value="yes"
  false-value="no"
>
{{toggle}}
data:{
     toggle:'',
}

运行图:

勾选

 

取消勾选

 

 

 

 

 

 

修饰符

.lazy 

在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转为在 change 事件_之后_进行同步:

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

 

.number

如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:

这通常很有用,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。

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

 

.trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

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

 

 
posted @ 2020-12-04 19:11  Tujomila  阅读(220)  评论(0)    收藏  举报