美文网首页
表单和 v-model

表单和 v-model

作者: 苦瓜_6 | 来源:发表于2018-08-29 21:04 被阅读0次

    Vue 提供了v­-model指令, 用于双向绑定表单类元素上 view 与 view-model 的数据

    基础用法

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

    单行文本
      <div id="app">
        <input type="text" v-model="msg"><br>
        你输入的是: {{ msg }}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
      let app = new Vue({
        el: '#app',
        data: {
          msg: ''
        }
      })
      </script>
    
    多行文本

    与单行文本类似:

        <textarea name="" id="" cols="30" rows="4"  v-model="msg">
          我是多行文本的初始值
        </textarea>
    

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


    image.png
    单选按钮
      <div id="app">
        <input type="radio" name="pets" value="cat" v-model="petName">猫猫 <br>
        <input type="radio" name="pets" value="dog" v-model="petName">狗狗   <br>
        现在选中的是: {{petName}}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            petName: ''
          }
        })
      </script>
    
    复选框
    单个复选框

    单个复选框,直接绑定到布尔值

     <div id="app">
        v-model: <input type="checkbox" v-model="checked"> {{ checked }} <br> 
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            checked: false
          }
        })
      </script>
    
    多个复选框

    多个复选框,绑定到同一个数组:

      <div id="app">
        <input type="checkbox" value="cat" id="cat" v-model="arr"> 
        <label for="cat">cat</label><br>
        <input type="checkbox" value="dog" id="dog" v-model="arr"> 
        <label for="dog">dog</label><br>
        <input type="checkbox" value="bird" id="bird" v-model="arr">
        <label for="bird">bird</label>
        <br> 
        你选中了 : {{ arr }}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            arr: []
          }
        })
    
    下拉框
    单选下拉框

    单选时, 初始化最好绑定到字符串

     <div id="app">
        <select v-model="selected">
          <option disabled value="">请选择</option>
          <!-- vue建议提供一个值为空的禁用选项 -->
          <option value="cat">猫猫</option>
          <option value="dog">狗狗</option>
          <option value="bird">小鸟</option>
        </select>
        <br> 你选中了 : {{ selected }}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            selected: '' //初始化最好给定字符串
          }
        })
      </script>
    
    多选下拉框

    多选时,绑定一个数组

      <div id="app">
        <select v-model="selected" multiple>
          <option disabled value="">请选择</option>
          <!-- vue建议提供一个值为空的禁用选项 -->
          <option value="cat">猫猫</option>
          <option value="dog">狗狗</option>
          <option value="bird">小鸟</option>
        </select>
        <br> 你选中了 : {{ selected }}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            selected: ''
          }
        })
      </script>
    

    值绑定

    对于单选按钮,复选框及下拉框的选项,v-model 绑定的值通常是静态字符串 (对于复选框也可以是布尔值)。
    但是有时我们可能想把值绑定到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串。

    单选按钮

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

      <div id="app">
      <input type="radio" v-bind:value='msg' v-model="pick">单选框<br>
        v-bind: {{ msg }} <br>
        v-model: {{ pick }}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            msg: 'msg',
            pick: 'pick'
          }
        })
      </script>
    //  当选中时  app.msg === app.pick
    

    当选中时 app.msg === app.pick

    复选框

    true-value 当选中时
    false-value 当没有被选中时

      <div id="app">
      <input type="checkbox" 
             v-model="toggle" 
             v-bind:true-value= "value1" 
             v-bind:false-value="value2">点击<br>
        toggle当前的值: {{ toggle}} <br>
        选中: {{ toggle === value1 }} <br>
        未被选中: {{ toggle === value2 }}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            toggle: 'toggle',
            value1: '我被选中了~',
            value2: '我没有被选中'
          }
        })
      </script>
    
    下拉框
      <div id="app">
       <select v-model="selected" >
         <option  v-bind:value="{a:1}">A</option>
       </select>
       当选中时,selected 的值为: {{selected}}
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        let app = new Vue({
          el: '#app',
          data: {
            selected: ''
          }
        })
      </script>
    

    修饰符

    .lazy

    v­-model默认是在input输入时实时同步输入框的数据,而lazy修饰符,可以使其使用 change 事件进行同步(在失去焦点或者敲回车键之后再更新)。
    来个 demo 感受一下

    .number

    自动将用户的输入值转为数值类型

    这通常很有用,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。

    .trim

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

    相关文章

      网友评论

          本文标题:表单和 v-model

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