表单和 v-model

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 自动过滤输入过程中首尾输入的空格

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,270评论 0 25
  • 表单类空间承载了一个网页数据的录入与交互,本章将介绍如何使用指令v-model完成表单的双向绑定。 6.1基本用法...
    六个周阅读 887评论 1 6
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,009评论 3 119
  • “绽放一地情花,覆盖一片青瓦”,轻轻吟唱徐志摩一首《水墨青花》,回想起某年的那个夏天在一个寂静的早晨,背起背...
    夜风微雨阅读 454评论 0 1
  • 最近忽感肚子疼痛,浑身发冷,被折腾坏了。幸亏去了躺医院。医生给的答案也很好玩。你们知道是怎么回事吗? 夏季已来,在...
    请我喝点卡卡HWRC21356阅读 253评论 0 0