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();
              });
            }
相关推荐
糕冷小美n7 小时前
elementuivue2表格不覆盖整个表格添加固定属性
前端·javascript·elementui
小哥不太逍遥7 小时前
Technical Report 2024
java·服务器·前端
沐墨染7 小时前
黑词分析与可疑对话挖掘组件的设计与实现
前端·elementui·数据挖掘·数据分析·vue·visual studio code
anOnion7 小时前
构建无障碍组件之Disclosure Pattern
前端·html·交互设计
threerocks7 小时前
前端将死,Agent 永生
前端·人工智能·ai编程
问道飞鱼8 小时前
【前端知识】Vite用法从入门到实战
前端·vite·项目构建
爱上妖精的尾巴8 小时前
8-10 WPS JSA 正则表达式:贪婪匹配
服务器·前端·javascript·正则表达式·wps·jsa
Aliex_git9 小时前
浏览器 API 兼容性解决方案
前端·笔记·学习
独泪了无痕9 小时前
useStorage:本地数据持久化利器
前端·vue.js
程序员林北北10 小时前
【前端进阶之旅】JavaScript 一些常用的简写技巧
开发语言·前端·javascript