this.$nextTick与this.$set,解决拖拽表格没有刷新问题!

一:this.$nextTick的用法

将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。

原因是,Vue是异步执行DOM更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOM操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。

在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM 状态去做某些事情,就会出现问题。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

简单来说就是你桌上有一个盒子,盒子里面装着一个苹果,我们console.log(this.盒子),会拿到苹果。但是我们给盒子一个点击事件,点击的时候,把苹果变成香蕉,此时我们去加一个console.log(this.盒子),会拿到苹果。再加一个

this.$nextTick(function () {
console.log(this.盒子)
})则会拿到香蕉。

当时我想利用这个方法,解决表格不刷新的问题,但是忽略了另外一个问题,表格的数据是层次深的数组,需要使用深拷贝转换一下,直接赋值的话,只能改变值,不能改变地址。

二:this.$set可以实现动态为data中的对象添加具有响应式效果的属性

用法:

Vue.set( target, key, value )

调用方法:this.$set( target, key, value )

//参数

target:要更改的数据源(可以是对象或者数组)

key:要更改或者新增属性的具体数据 (对象的key为键,数组的key为下标)

value :重新赋的值

官方解释:向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。

应用场景:

需要为data对象添加一个新属性时或修改某个属性的值时,却没有更新到视图上,这个时候就用$set解决

javascript 复制代码
 // 给数组层次较深的数据赋值,使用深拷贝,
//另外,使用set把tableData的索引替换成targetObject,解决刷新表格内容!
            if (resData.Data.length > 0) {
              const targetObject = JSON.parse(
                JSON.stringify(this.tableData[this.addIndex])
              );
              targetObject.SimuCadres.map(item => {
                if (item.CadreID == this.addOneCadreID) {
                  item.DisplayInformation = true;
                }
              });
              this.$set(this.tableData, this.addIndex, targetObject);
              this.$nextTick(() => {
                this.$refs.tableDataAgain[0].doLayout();
              });
            }
相关推荐
程序猿_极客2 分钟前
JavaScript 的 Web APIs 入门到实战全总结(day7):从数据处理到交互落地的全链路实战(附实战案例代码)
开发语言·前端·javascript·交互·web apis 入门到实战
suzumiyahr3 分钟前
用awesome-digital-human-live2d创建属于自己的数字人
前端·人工智能·后端
萧曵 丶17 分钟前
Python 字符串、列表、元组、字典、集合常用函数
开发语言·前端·python
申阳20 分钟前
Day 10:08. 基于Nuxt开发博客项目-关于我页面开发
前端·后端·程序员
拉不动的猪23 分钟前
Webpack 与 Rollup 中 Tree-shaking 的实现原理与效果
前端·webpack·rollup.js
林太白25 分钟前
跟着TRAE SOLO学习两大搜索
前端·算法
yunyi25 分钟前
使用go的elastic库来实现前后端模糊搜索功能
前端·后端
一枚前端小能手26 分钟前
2618. 检查是否是类的对象实例(JavaScript)
前端·javascript
倚肆1 小时前
CSS中transition属性详解
前端·css
快递鸟1 小时前
物流信息总滞后?快递鸟在途监控 API,毫秒级响应让物流透明不等待
前端