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();
              });
            }
相关推荐
@大迁世界6 小时前
Firefox 本地模式:localhost 再见了 ?
前端·架构
米米商聊9 小时前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
echome88810 小时前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
时间的情敌10 小时前
OpenLayers 实战|Vue3 + OpenLayers 完整工程案例(加载天地图、要素、弹窗、绘制、WFS)
前端·openlayers
陈随易10 小时前
下载神器!Motrix 停更三年后重写回归
前端·后端·程序员
前端的日常10 小时前
一个人+AI做情侣食谱小程序,0 费用的服务器
前端·后端
计算机魔术师11 小时前
谷歌搜索广告踩刹车,AI广告成为救命稻草
前端
总要学点什么11 小时前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析
IT_陈寒11 小时前
Vue的v-for里用了个临时变量,页面直接挂了
前端·人工智能·后端
hunter_07611 小时前
一次 iOS 真机签名 409 的完整排查:证书、设备、描述文件为什么总是"对不上"
前端