Vue 的 v-model用法实例


Posted in Vue.js onNovember 23, 2020

Vue 框架早已经不是 MVVM(Mode-View-View-Model) 双向绑定了。早在 Vue 1.0 时代,Vue 在刚出世的时候的确是 MVVM 双向绑定。自 Vue 2.0 以来,Vue 就不再是双向绑定了,而是像 React 一样是单向绑定 MV(Model-View)了。但是,在 Vue 中仍保留了双向绑定的接口,v-model 就是。

1. 基本用法

<template>
 <div id="app">
  <input v-model="x">
  {{x}}
 </div>
</template>

<script>
export default {
 data(){
  return {
   x: 'init'
  }
 }
}

在 JS 中修改 x 的值,input 输入框里也会随之改变。同样地,在页面中的 input 输入框内手动输入值,变量 x 的值也会随之改变。对象里的变量改变会影响视图的 input 的改变,视图中 input 的改变会影响对象里变量 x 值的改变。这就是双向绑定(Model-View-View-Model)。

2. v-model

实质上述使用 v-model 的代码等价于如下代码:

<template>
 <div id="app">
  <input :value="x" @input="x = $event.target.value">
  {{x}}
 </div>
</template>

<script>
export default {
 data(){
  return {
   x: 'init'
  }
 }
}
</script>

v-model 帮我们做的事就是,为 input 的 value 值设置一个动态绑定,然后在输入框的 input 事件触发后实时修改动态绑定的 value 的变量值。因此 v-model 实质是上述方式的语法糖。

$event 是原生 DOM 事件里的 event 事件对象。

3. v-model 的修饰符

所有修饰符都是起一个辅助的作用,其实可以在函数里自己判断条件实现。.lazyv-model 默认监听的是输入框的input 事件,原生 DOM 的input 事件就是记录实时的输入变化值。但是,我们有时不需要实时记录结果,只需要记录最终输入的结果值就可以了。

input 的原生 DOM 事件中还有一个change 事件,该事件是在输入框失去焦点时 或 按下回车键时 执行的。v-model 里以.lazy 修饰符的方式切换至该监听模式。

<template>
 <div id="app">
  <input v-model.lazy="x">
  {{x}}
 </div>
</template>等价于:<template>
 <div id="app">
  <input :value="x" @change="x = $event.target.value">
  {{x}}
 </div>
</template>

.number.number修饰符是在输入内容改变后进行变量赋值时,自动使用 parseFloat() 函数将其变成数字。使用该修饰符时变量的初始值必须是数字。

<template>
 <div id="app">
  <input v-model.number="x">
  {{x}}
 </div>
</template>

<script>
export default {
 data(){
  return {
   x: 0
  }
 }
}
</script>
  • .trim

.trim修饰符是将输入的内容改变后进行变量赋值时,自动忽略和去除前后的空格。更为精准地记录输入的字符串内容。

<template>
 <div id="app">
  <input v-model.trim="x">
  {{x}}
 </div>
</template>

<script>
export default {
 data(){
  return {
   x: 'init'
  }
 }
}
</script>

4. 自定义输入框的 v-modelv-model

的基本用法仅仅适用于原生的输入框元素 ,对于用户自己封装的输入框,可以用如下方式使用 v-model。当用在组件上时,v-model 的实质如下:

<custom-input v-model="x"></custom-input>

等价于:

<custom-input :value="x" @input="x = $event"></custom-input>

因此,在自定义表单组件里的写法如下:

<template>
  <div class="wrapper">
    <input :value="value" @input="$emit('input', $event.target.value)">
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: String
    }
  }
}
</script>

<style scoped>
  .wrapper{
    border: 2px solid blue;
    display: inline-block;
  }
  .wrapper input{
    color: red;
  }
</style>
<template>
 <div id="app">
  <MyInput v-model="x"/>
  {{x}}
 </div>
</template>

<script>
import MyInput from './components/MyInput'
export default {
 data(){
  return {
   x: 0
  }
 },
 components:{
  MyInput
 }
}
</script>

补充:若想在自定义组件里面的原生输入框也使用 v-model,可以根据组件 v-model 的实质,使用计算属性的赋值方式为=使用。

以上就是Vue 的 v-model用法实例的详细内容,更多关于vue v-model的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
vue watch监控对象的简单方法示例
Jan 07 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue实现同时设置多个倒计时
May 20 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue-router中hash模式与history模式的区别
Jun 23 Vue.js
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 #Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 #Vue.js
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 #Vue.js
详解vue 组件注册
Nov 20 #Vue.js
vue-drawer-layout实现手势滑出菜单栏
Nov 19 #Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 #Vue.js
如何使用 vue-cli 创建模板项目
Nov 19 #Vue.js
You might like
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
Python实现注册登录系统
2017/08/08 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
python标准库OS模块详解
2020/03/10 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
军训自我鉴定
2013/12/14 职场文书
运动会广播稿30字
2014/01/21 职场文书
学雷锋演讲稿
2014/03/04 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
工商局调档介绍信
2015/10/22 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang