美文网首页
表单 + v-model

表单 + v-model

作者: 5吖 | 来源:发表于2019-03-11 18:08 被阅读0次

    A、 作用

    表单类元素上双向绑定事件

    B、基本用法

    1、input + textarea

    所显示的值只依赖于所绑定的数据,不再关心初始化时的插入的value

    <!--我是多行文本的初始化值 不会显示了,显示内容是 msg 的内容 -->
    <textarea name="" id="" cols="30" rows="2" v-model="msg">我是多行文本的初始化值</textarea> 
    {{ msg }}
    

    2、单选按钮

    2.1、 单个单选框

    只能用v-bind,而v-model 不管用

    <input type="radio" v-bind:checked = "oneradio">
    

    2.2、 多个单选框

    如果是多个单选框,一定要v-­model来绑定,绑定选中的单选框的value值,此处所绑定的初始值可以随意给

    //html    给name值表示多个单选项,只能选择一个 
    单选1<input type="radio" name="checks" value="单选1" v-model="checkname"><br>
    单选2<input type="radio" name="checks" value="单选2" v-model="checkname"><br>
    单选3<input type="radio" name="checks" value="单选3" v-model="checkname"><br>
    <br>
    现在选中的是 {{ checkname }}
    
    //js
    ...
    data:{
            value: '',
            msg: '',
            oneradio: false,
            checkname: '单选1' // 此处所绑定的初始值可以随意给
    }    
    

    3、复选框

    3.1、单个复选框

    直接用定一个布尔值,可以用v­-modev­-bind

    单个复选框(v-bind表示):<input type="checkbox" v-bind:checked="oneradio"> <br>
    单个复选框(v-model表示):<input type="checkbox" v-model="oneradio">
    

    3.2、多个复选框

    需要v­-model来配合value使用 + v­-model绑定一个数组

    注:如果绑定的是字符串,则会转化为true或false,与所有绑定的复选框的checked属性相对应

    //html
    多个复选框 <br>
    选项1<input type="checkbox" value="选项1" v-model="checks">
    选项2<input type="checkbox" value="选项2" v-model="checks">
    选项3<input type="checkbox" value="选项3" v-model="checks">
    <br>
    现在选中的是 {{ checks }}
    
    //js
    ...
    data:{
            value: '',
            msg: '',
            oneradio: true,
            checkname: '单选1',
            checks: '' // 绑定的是字符串,则会转化为true或false
            checks: [] // 绑定的是数组,含有选中的复选框的value值的一个数组
    }    
    

    4、 下拉框

    4.1、 如果是单选,所绑定的value值初始化可以为 数组字符串,结果是转化为所选定项的value值

    注: 有value直接优先匹配一个value值,没有value就匹配一个text值

    4.2、 如果是多选,需要v­-model来配合value使用,v­-model绑定一个数组,与复选框类似

    4.3、 v­-model一定绑定在select标签上

    //html
    <select v-model="selected">
            <option value="选项1">选项1</option>
            <option value="选项2">选项2</option>
            <option value="选项3">选项3</option>
    </select>
    <br>
    现在选中的是 {{ selected }}
    
    //js
    ...
    data:{
            value: '',
            msg: '',
            oneradio: true,
            checkname: '单选1',
            checks: [],
            selected:'',// value 值为字符串可以
            selected:[] // value 值为数组也可以
     }    
    

    小总结:

    1、如果是单选,初始化最好给定字符串,因为v­-model此时绑定的是静态字符串或者布尔值

    2、如果是多选,初始化最好给定一个数组

    C、绑定值

    1、 单选按钮

    v­-bind给单个单选框绑定一个value值,此时,v­-model绑定的就是他的value值

    //v-model对单个单选框不生效,但是给单选按钮动态绑定一个value值,就能通过v-model获取它的value值
    <input type="radio" v-model="picked" v-bind:value="value">{{picked}}
    

    2、复选框

    通过true-value、false-value 去绑定value值,v­-model绑定的就是他的value值

    //html  
    <input type="checkbox" v-model="toggle" :true-value="value1" :false-value="value2">
    {{toggle}} <br>
    选中:{{ toggle == value1}} <br>
    没选中: {{ toggle == value2}}
    //js
    ...
    data:{
        toggle: true,
        value1: '选中啦',
        value2: '没有选中啦'   
    } // 选中和没选中时的value值不一样
    

    3、下拉框
    在select标签上,v-model绑定的是option上的value值,绑定value值对option并没有影响

    //html
    <select v-model="valueSele" :value="{num:123}"> 
      <option value="list1">list1</option>
      <option value="list2">list2</option>
      <option value="list3">list3</option>
    </select>
    {{typeof valueSele}}----{{ valueSele }}
    
    // 若把 :value="{num:123}"动态绑定到option上
    <select v-model="valueSele"> 
      <option value="list1" :value="{num:123}">list1</option>
    </select>
    
    //js
    ...
    data:{
        valueSele:''   
    }
    

    D、修饰符

    1、lazy

    v­-model默认是在input输入时实时同步输入框的数据,而lazy修饰符,可以使其在失去焦点或者敲回车键之后在更新

    <input type="text" v-model.lazy="msg">{{msg}} // 敲回车或在失去焦点后渲染
    

    2、number

    将输入 的字符串转化为number类型

    <input type="text" v-model.number="value">{{typeof value}}
    

    3、trim

    自动过滤输入过程中首尾输入的空格

    <input type="text" v-model.trim='value'>{{value.split('').length}}
    

    【Demo 实例 https://jsbin.com/fabuqey/edit?html,output

    相关文章

      网友评论

          本文标题:表单 + v-model

          本文链接:https://www.haomeiwen.com/subject/qzabpqtx.html