23 直接使用 dom api 更新了 #text节点, 之后响应式更新不生效了

news/2024/7/9 23:39:14 标签: vue, js, events

  前言 

这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 

主要记录的是 vue 的相关实现机制 

呵呵 理解本文需要 vue 的使用基础, js 的使用基础 

问题引发自 VueComponent 响应式处理 里面有一段内容, 直接在 console 中使用 dom 的 api 更新了最基层的 div 节点的 textContent, 然后 之后 再点击 按钮 发现响应式更新不生效了 

 测试用例

测试用例如下, 一个简单的 按钮事件的触发  

问题的调试

模板如下, 这里我们主要关注的是 el-card 下面的 文本内容 

在 vue 中会被创建一个 #text 节点 

渲染之后 html 如下 

从页面 dom 中我们是看不到这个 #text 节点, 因此 假设我们直接去更新了 div.el-card__body 的 textContent, 之后 你会发现 之后无论如何点击 按钮, 内容都不会再更新了 

使用 js 的 api 更新了 div.el-card__body 的 textContent, 之后无论如何 点击按钮, 都不会再更新了 

 

这是因为 在实际的 dom 结构中 div.el-card__body 下面还有一层 #text 的子节点 

我们这里直接 document.getElementsByClassName("el-card__body")[0].textContent = "nihao" 操作了之后, 是新建了一个 #text 节点然后挂载 div.el-card__body 上面 

调整的方式更新为 使用 div.el-card__body 下面的 #text 节点来更新即可 

document.getElementsByClassName("el-card__body")[0].childNodes[0].textContent = "nihao"

 


http://www.niftyadmin.cn/n/365029.html

相关文章

一些小的问题2

自己实现strcpy、strcat、strlen和strcmp。 注意,这里的 my_strcpy 和 my_strcat 函数的第一个参数是目标字符串,第二个参数是源字符串。另外,my_strcmp 函数的返回值为0表示两个字符串相等,小于0表示前者小于后者,大…

Git进阶·GitFlow·壹

文章目录 1 Git进阶——GitFlow工作流程1.1 master与develop分支1.1.1 master1.1.2 develop 1.2 feature分支1.3 Release分支1.4 hotfix分支1.5 GitFlow示例1.5.1 在master上新建dev分支1.5.2 基于dev创建feature分支1.5.3 feature分支上开发业务代码1.5.4 将feature合并到dev1…

<SQL>《SQL命令(含例句)精心整理版(6)》

《SQL命令(含例句)精心整理版(6)》 18 DB2查询语句18.1 查询数据库大小18.2 查看表占表空间大小18.3 查看正在执行的语句18.4 db2expln 查看执行计划18.5 db2advis 查看优化建议 19 空值19.1 NULL19.2 TRIM 18 DB2查询语句 18.1 …

八、Mybatis-plus从入门到高手

一、Mybatis-plus概述 MyBatis-Plus是一个为MyBatis提供增强功能的开源框架,是对MyBatis进行了简化,并提供了一些常用功能的自动化映射,MyBatis-Plus的目标是减少样板代码,增加开发效率。 Mybatis-plus提供了许多增强功能和扩展…

PS磨皮插件免费电脑版Portraiture4.03下载及使用教程

Portraiture是一款智能磨皮插件,为Photoshop和Lightroom添加一键磨皮美化功能,快速对照片中皮肤、头发、眉毛等部位进行美化,Portraiture 4用于人像图片润色,磨皮等,减少了人工选择图像区域的重复劳动。它能智能地对图…

算法基础学习笔记——⑦位运算

✨博主:命运之光 ✨专栏:算法基础学习 目录 ✨位运算 ✨操作一 🍓十进制转化成二进制、八进制、十六进制(连除法) 🍓二进制、八进制、十六进制转化成十进制 🍓关于原码,反码&am…

chatgpt赋能python:Python循环结束的方式

Python循环结束的方式 在Python编程中,循环是一个非常重要的概念。循环是在程序中重复执行一段代码的方法。当满足特定条件时,循环可以继续执行,否则循环将结束。循环包括while循环和for循环两种方式。 while循环结束的方式 while循环是Py…

chatgpt赋能python:Python判断语句:if语句

Python判断语句:if语句 在Python编程中,判断语句是非常重要的语法之一。if语句是最基本的判断语句,可以根据条件的真假来执行我们需要的代码块。 什么是if语句? if语句是一种条件语句。在Python中,if语句用于执行一…