vue v-model 的注意点

摘要:
在使用表单元素输入的v-model指令时,我遇到了一个问题:如上图所示,修改输入内容,使其可以随时显示;但显示速度显然很慢{{obj.x}exportdefault{name:‘HelloWorld’,data(){return{obj:{val:‘‘}}}},methods:{onUpdate(){{this.obj.x=this.obj.val}}}}j添加属性x,这是无响应的。输出obj还可以观察到val具有getter/setter,这是一个存储属性;新添加的X只是一个简单的数据属性。看一下文档,因为v-model在触发输入事件后基本上会同步输入框的值和数据。尝试更改事件:<inputv model>。lazy=“obj.val”@change=“onUpdate”。

在使用表单元素 input 的 v-model 指令时,碰到一个问题:

vue v-model 的注意点第1张

如上图,修改 input 的内容,以便随时显示;但显示时明显慢一步。

<template>
  <div>
    <input type="text" v-model="obj.val" @keyup="onUpdate">
    <span class="show">{{ obj.x }}</span>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      obj: {
        val: ''
      }
    }
  },
  methods: {
    onUpdate () {
      this.obj.x = this.obj.val
    }
  }
}
</script>

稍微熟悉 vue 就明白,这是因为给 obj 新增了属性 x,而 x 并不是响应式的。

vue v-model 的注意点第2张

输出 obj 也可以观察到:

vue v-model 的注意点第3张

val 有 getter/setter,是一个 存储器属性;而新增的 x 只是一个单纯的 数据属性

根据官方文档,用 set 方法即可解决:

this.$set(this.obj, 'x', this.obj.age)

但如果一定要用等号 = 赋值的话,是不是没办法解决视图渲染延迟的问题?

其实可以将监听事件改为 input 就行: @input="onUpdate"

为什么是 input 而不是其它事件?

再看看文档

vue v-model 的注意点第4张

因为 v-model 本质上就是在 input 事件触发后同步输入框的值与数据。

再试试 change 事件:

vue v-model 的注意点第5张

<input v-model.lazy="obj.val" @change="onUpdate">

vue v-model 的注意点第6张

当然这种方式导致 x 不是响应式属性,但能解决问题,只是不知道会不会产生其它问题。

免责声明:文章转载自《vue v-model 的注意点》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇远程获取--snmp模块(python)/snmp-cmds,easysnmpspring事务配置步骤下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue3.0搭建项目+map地图

1. 进入目录,搭建cli脚手架:npm install -g @vue/cli 2. 启动GUI界面:vue ui 3. 根据所选新建项目 4. 安装地图组件:npm install vue-amap --save 5. main.js入口文件: import Vue from 'vue'import VueAMap from 'vue-amap';im...

vue中的父子组件之间的通信--新增、修改弹框

在一个vue页面中有时候内容会很多,为了方便编写查看,可以分为多个子组件,最后在父组件中引入对应的子组件即可。 下面这个是父子组件通信中的一个具体实例:新增、修改弹框。子组件中主要写了关于新增、修改的弹框, 子组件: 1.弹框: <div class="newDocuments"> <div class="newDocuments_...

vue版本更新

之前电脑已经安装 Node环境和 vue-cli脚手架,但是过段时间没有使用,然后现在用 vue-cli 搭建项目的时候,启动服务器的时候报错,无法启动成功,摸索半天,发现是因为 Node和vue-cli 的版本过低,都需要更新,更新过后成功启动...... 以下是 Node 和 vue-cli 更新的总结: 一. vue-cli更新   在百度了好久,...

web读取本地文档

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。 其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCan...

从零开始的野路子React/Node(9)Antd + multer实现文件上传

最近心血来潮,打算自己捣腾个web app来练练手(虽然大概率会半路弃坑……),其中有一部分是关于文件上传的,在实现的过程中遇到了一些坑,于是打算把血泪教训都记录下来。 前端的部分采用了Antd,不得不说真是香,至少比我司内部的前端库香了1000倍……事半功倍。后端部分则主要通过multer来实现,目测应该是一种比较通用的做法? 1、捯饬前端 首先我们新建...

使用vue的v-show和transition制作一个简单轮播图

<template> <!--轮播图--> <div id="carousel"> <transition-group tag="ul" :name="transitionName"> <li v-for="(list,index) in slideList" :key="i...