热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

刷新子组件

用户点击查看,将编号传入,之后展示与编号相关的那条信息。但是子组件只创建一次,不刷新。导致点击不同的查看按钮,显示出来的di

在这里插入图片描述
用户点击查看,将编号传入,之后展示与编号相关的那条信息。
但是 子组件只创建一次,不刷新。导致 点击不同的 查看按钮,显示出来的dialog框中的内容都是第一次点击内容。

解决方案:
利用 v-if(销毁和重建)可以强制刷新子组件

<el-dialog title&#61;"查看" :visible.sync&#61;"dialogFormVisible" destroy-on-close>//需要销毁重建的组件<edit-form v-if&#61;"forceRefresh"></edit-form>
</el-dialog>//触发事件
handleNoAnswer(index, row) {//forceRefresh 变量需要在data&#xff08;&#xff09; 中申明一下this.forceRefresh &#61; falseconsole.log(index, row)console.log(row.id)localStorage.setItem("ArticleNO",row.id);//强制刷新this.$nextTick(() &#61;> {this.forceRefresh &#61; truethis.dialogFormVisible &#61; true})},

原理

Vue的重要概念&#xff1a;异步更新队列
Vue在观察到数据变化时并不是直接更新DOM&#xff0c;而是开启一个队列&#xff0c;并缓冲在同一事件循环中发生的所有数据改变。 Vue 异步执行 DOM 更新。只要观察到数据变化&#xff0c;Vue 将开启一个队列&#xff0c;并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发&#xff0c;只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要。然后&#xff0c;在下一个的事件循环“tick”中&#xff0c;Vue 刷新队列并执行实际。

也就是说&#xff1a;Vue监听到数据变化但是不会立马直接更新试图&#xff0c;而是先建立一个队列&#xff0c;把跟这个数据有关的所有dom节点放进去&#xff0c;直到在下一个的事件循环“tick”中&#xff0c;Vue才 刷新队列并执行实际 (已去重的) 工作。重点来了&#xff0c;当所有dom 更新后&#xff0c;会触发nextTick回调函数。也就是说dom更新之后 nextTick&#xff08;&#xff09;被调用了&#xff01;

nextTick&#xff08;&#xff09;的作用是&#xff1a;将回调延迟到DOM 更新循环之后执行。在修改数据时立即使用它&#xff0c;然后等待 DOM 更新&#xff0c;便可达到获取 更新后的节点 的目的。

推荐阅读
author-avatar
措小爱2TU1984
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有