Vue表单输入绑定的示例代码


Posted in Javascript onNovember 01, 2018

基础用法

你可以用v-model指令在表单input,textarea以及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但是v-model本质上不过是语法糖。它负责监听用户的输入事件以更新数据。

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

(1) 文本

<input v-model="message" placehoder="edit me">

(2) 多行文本

<textarea v-model="message"></textarea>

(3) 复选框

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

<input type="checkbox" v-model="checked">

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

<div id='example-3'>
 <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
 <label for="jack">Jack</label>
 <input type="checkbox" id="john" value="John" v-model="checkedNames">
 <label for="john">John</label>
 <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
 <label for="mike">Mike</label>
 <br>
 <span>Checked names: {{ checkedNames }}</span>
</div>

new Vue({
 el: '#example-3',
 data: {
  checkedNames: []
 }
})

(4) 单选按钮

<div id="example-4">
 <input type="radio" id="one" value="One" v-model="picked">
 <label for="one">One</label>
 <br>
 <input type="radio" id="two" value="Two" v-model="picked">
 <label for="two">Two</label>
 <br>
 <span>Picked: {{ picked }}</span>
</div>

new Vue({
 el: '#example-4',
 data: {
  picked: ''
 }
})

(5) 选择框

单选时:

<div id="example-5">
 <select v-model="selected">
  <option disabled value="">请选择</option>
  <option>A</option>
  <option>B</option>
  <option>C</option>
 </select>
 <span>Selected: {{ selected }}</span>
</div>

new Vue({
 el: '...',
 data: {
  selected: ''
 }
})

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

多选时(绑定到一个数组)

<div id="example-6">
 <select v-model="selected" multiple style="width: 50px;">
  <option>A</option>
  <option>B</option>
  <option>C</option>
 </select>
 <br>
 <span>Selected: {{ selected }}</span>
</div>

new Vue({
 el: '#example-6',
 data: {
  selected: []
 }
})

值绑定

对于单选按钮,复选框以及选择框的选项,v-model绑定的值通常是静态字符串(对于复选框也可以是布尔值):

<!-- 当选中时,`picked` 为字符串 "a" -->
<input type="radio" v-model="picked" value="a">

<!-- `toggle` 为 true 或 false -->
<input type="checkbox" v-model="toggle">

<!-- 当选中第一个选项时,`selected` 为字符串 "abc" -->
<select v-model="selected">
 <option value="abc">ABC</option>
</select>

(1) 复选框

<input
 type="checkbox"
 v-model="toggle"
 true-value="yes"
 false-value="no"
>

这里的 true-value 和 false-value 特性并不会影响输入控件的 value 特性,因为浏览器在提交表单时并不会包含未被选中的复选框。如果要确保表单中这两个值中的一个能够被提交,(比如“yes”或“no”),请换用单选按钮。

(2) 单选按钮

<input type="radio" v-model="pick" v-bind:value="a">
// 当选中时
vm.pick === vm.a

修饰符

(1) .lazy

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

(2) .number

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

(3) trim

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

示例:

// >>>>>>> html
  <div id="app" >
    <!-- 输入框绑定 -->
    <input v-model='massage' placeholder="输入信息" >
    <p>massage is:{{ massage }}</p>
    <hr>
    <!-- 单个选框绑定,返回值为布尔值 -->
    <p>单个选框绑定,返回值为布尔值:</p>
    <input v-model='radioStatus' type="checkbox" name="isAgree">
    <br>
    <label>数据:{{radioStatus}}</label>

    <hr>
    <!-- 多个选框绑定到同一个数据 -->
    <div>
      <p> 多个选框绑定同一个数据: </p>
      <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
      <label for="jack">Jack</label>
      <input type="checkbox" id="john" value="John" v-model="checkedNames">
      <label for="john">John</label>
      <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
      <label for="mike">Mike</label>
      <br>
      <!-- checkedNames 为一个数组 [] -->
      <span>数据: {{ checkedNames }}</span>         
    </div>
    <hr>
    <div>
      <p>单选按钮数据:</p>
      <input type="radio" id="one" value="1" v-model="sex"><label for="one">{{stantic.garder[1]}}</label>
      <input type="radio" id="two" value="2" v-model="sex"><label for="two">{{ stantic.garder[2] }}</label>
      <input type="radio" id="three" value="3" v-model="sex"><label for="three">{{ stantic.garder[3] }}</label>      
      <br>
      <!-- sex === 选中的input的value -->
      <span>性别代码: {{ sex }};性别:{{stantic.garder[sex]}}</span>
    </div>
    <hr>
    <div>
      <p>选择列表:</p>
      <select v-model="selected">
        <option disabled value="">请选择</option>
        <option value="001" >北京</option>
        <option value="003" >天津</option>
        <option value="008" >上海</option>
      </select>
      <span>Selected: {{ selected }}</span>    
    </div>
    <hr>
    <div>
      <h3>值绑定:</h3>
      <p>
        对于单选按钮,勾选框及选择列表选项,v-model 绑定的 value 通常是静态字符串 (对于勾选框是逻辑值): 
        <br>
        但是有时我们想绑定 value 到 Vue 实例的一个动态属性上,这时可以用 v-bind 实现,并且这个属性的值可以不是字符串。

      </p>
      <!-- vm.toggle 和 vm.stantic.isOrNot 绑定 -->
      <label>是否毕业:</label>
      <input type="checkbox" name="" v-model='toggle' v-bind:true-value=stantic.isOrNot[1] v-bind:false-value=stantic.isOrNot[0] >
      <!-- 选中时 vm.toggle === stantic.isOrNot[1] 未选中时 vm.toggle === stantic.isOrNot[0] -->
      <p>您选择了:{{toggle}}</p>
      
      <h4>选择列表的值绑定字面量对象:</h4> 
      <select v-model="selected2">
        <!-- 内联对象字面量 -->
        <option v-bind:value="{ number: 123 }">123</option>
        <option v-bind:value="{ number: 456 }">456</option>
        <option v-bind:value="{ number: 789 }">789</option>
      </select>
      <span>vm.selected={{selected2}}</span>
    </div>
    <hr>
    <div>
      <h3>修饰符</h3>
      
      <h4>.lazy</h4>
      <p>在默认情况下,v-model 在 <mark>input</mark> 事件中同步输入框的值与数据 (除了 上述 IME 部分),但你可以添加一个修饰符 lazy ,从而转变为在 <mark>change</mark> 事件中同步:</p>
      <input v-model.lazy='massage' >
      <p>输入完成,信息改变:{{massage}}</p>
      
      <h4>.number</h4>
      <p>如果想自动将用户的输入值转为 Number 类型 (如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值:</p>
      <!-- vm.age的值类型是Number -->
      <input type="number" v-model.number='age' >
      <span>类型为:{{ typeof age }}</span>

      <h4>.trim</h4>
      <p>如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入:</p>
      <input v-model.trim='massage' > 
    </div>
  </div>
 

 //    >>>>>>js

  // 基础用法 v-model
  let vm = new Vue({
    el:'#app',
    data:{
      massage:'',
      radioStatus:false,
      checkedNames:[],
      sex:'',
      age:'',
      toggle:'',
      selected:'',
      selected2:'',
      stantic:{
        garder:{
          1:'男',
          2:'女',
          3:'不确定'
        },
        Hobbies:{

          1:'电影',
          2:'美食',
          3:'游戏',
          4:'科技'
        },
        isOrNot:{
          1:'是',
          0:'否'
        }
      }
    }

  });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 遮照层实现代码
Mar 31 Javascript
JS定时关闭窗口的实例
May 22 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
script标签属性用type还是language
Jan 21 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
Oct 13 Javascript
JavaScript数据结构与算法之集合(Set)
Jan 29 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
Vue 中axios配置实例详解
Jul 27 Javascript
Javascript 之封装(Package)
Sep 14 Javascript
Puppeteer 爬取动态生成的网页实战
Nov 14 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
Sep 10 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 09 Javascript
浅谈Angular 观察者模式理解
Nov 01 #Javascript
详解vuex状态管理模式
Nov 01 #Javascript
详解angularjs跨页面传参遇到的一些问题
Nov 01 #Javascript
Vue.js 事件修饰符的使用教程
Nov 01 #Javascript
微信小程序实现蒙版弹窗效果
Nov 01 #Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
Nov 01 #Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
Oct 31 #Javascript
You might like
PHP 木马攻击防御技巧
2009/06/13 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
js静态方法与实例方法分析
2011/07/04 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
python中__call__内置函数用法实例
2015/06/04 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python让列表倒序输出的实例
2018/06/25 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
致跳远、跳高运动员广播稿
2014/01/09 职场文书
大学生求职计划书
2014/04/30 职场文书
小学生倡议书范文
2014/05/13 职场文书
学雷锋的心得体会
2014/09/04 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书