Vue你不知道的v-model指令,绑定选择框

举报
前端老实人 发表于 2021/11/29 13:57:32 2021/11/29
【摘要】 v-model指令可以在表单元素上创建双向数据绑定。即数据更新元素更新、元素更新数据也会更新。本质上v-model为语法糖元素类型属性事件input[type=text]、textareavalueinputinput[checkbox]、input[radio]checkedchangeselectvaluechange input type=text 文本框<div id="app">...

v-model指令

可以在表单元素上创建双向数据绑定。即数据更新元素更新、元素更新数据也会更新。

本质上v-model为语法糖

元素类型 属性 事件
input[type=text]、textarea value input
input[checkbox]、input[radio] checked change
select value change

input

type=text 文本框

<div id="app">
  <input v-model="message">
  <p>Message 为: {{ message }}</p>
</div>
const vm = new Vue({
  el: '#app',
  data:; {
    message: ''
  }
})

type=checkbox 复选框

单个复选框

绑定到布尔值,v-model=“Boolean”

<div id="app">
  <input 
    type="checkbox" 
    id="checkbox" 
    v-model="checked"
  />
  <label for="checkbox">{{ checked }}</label>
</div>
const vm = new Vue({
  el: '#app',
  data: {
    checked: true
  }
})

多个复选框

绑定到同一个数组,v-model=“Array” 数组中的值为被选中的input框value值

<div id="app">
  <input type="checkbox" id="cheng" value="a" v-model="checkedNames">
  <label for="cheng">a</label>

  <input type="checkbox" id="deng" value="b" v-model="checkedNames">
  <label for="deng">b</label>
  
  <input type="checkbox" id="tong" value="c" v-model="checkedNames">
  <label for="tong">c</label>
  <br>
  <span>被选中的人有: {{ checkedNames }}</span>
</div>
const vm = new Vue({
  el: '#app',
  data: {
    checkedNames: []
  }
}) 

type=radio 单选框

被绑定的数据和value同步

<div id="app">
  <input type="radio" id="cheng" value="哥哥" v-model="picked">
  <label for="cheng">哥哥</label>
  <input type="radio" id="deng" value="妹妹" v-model="picked">
  <label for="deng">妹妹</label>
  <input type="radio" id="tong" value="姐姐" v-model="picked">
  <label for="deng">姐姐</label>
  <br>
  <span>被选中的人: {{ picked }}</span>
</div>
const vm = new Vue({
  el: '#app',
  data: {
    picked: ''
  }
}) 

textarea

<div id="app">
  <p >多行文本为:{{ message }}</p>
  <textarea v-model="message" placeholder="添加文本"></textarea>
</div>
const vm = new Vue({
  el: '#app',
  data: {
    message: ''
  }
})  

select

匹配的值为option中的汉字

单选

<div id="app">
  <select v-model="selected">
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  <span>选择: {{ selected === '请选择' ? '' : selected }}</span>
</div>
const vm = new Vue({
  el: '#app',
  data: {
    selected: '请选择'
  }
}) 

注意:如果 v-model 表达式的初始值未能匹配任何选项,<select> 元素将被渲染为“未选中”状态。在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发 change 事件。因此,可以提供一个值为空的禁用选项:

<div id="app">
  <select v-model="selected">
    <option :disabled="selected">请选择</option>
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  <span>选择: {{ selected === '请选择' ? '' : selected }}</span>
</div>

多选

绑定到一个数组

<div id="app">
  <select v-model="selected" multiple>
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  <span>选择: {{ selected }}</span>
</div>
const vm = new Vue({
  el: '#app',
  data: {
    selected: []
  }
}) 

修饰符

.lazy

在默认情况下,v-model在每次input事件触发后将输入框的值与数据进行同步。如果要变为使用change事件同步可以添加lazy修饰符:

 <!-- 在“change”时而非“input”时更新 --> 
<input v-model.lazy="msg" >

.number

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

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

.trim

自动过滤用户输入的首尾空白字符:

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

课后作业

练习_简易计算器

不会的同学私信老师哦~

练习_调查问卷

questionList: [
  {
    type: 'short',
    title: '1.请问你的姓名是?',
    chooseList: null,
    answer: '',
    id: 0
  },
  {
    type: 'single',
    title: '2.请问您的性别是?',
    chooseList: [
      '男',
      '女',
      '保密',
    ],
    answer: '',
    id: 1,
  },
  {
    type: 'multiple',
    title: '3. 请选择您的兴趣爱好:',
    chooseList: [
      '看书',
      '游泳',
      '跑步',
      '看电影',
      '听音乐',
    ],
    answer: [],
    id: 2,
  },
  {
    type: 'long',
    title: '4. 请介绍一下自己:',
    chooseList: null,
    answer: '',
    id: 3,
  },
]

最后

如果对您有帮助,希望能给个👍评论收藏三连!

博主为人老实,无偿解答问题哦❤

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。