vue中集成jsplumb报错`Cannot read property ‘parentNode‘ of null`,且无法渲染连线的问题

本文介绍了在Vue项目中集成jsplumb时遇到的`Cannot read property 'parentNode' of null`错误以及连线无法渲染的问题。通过使用Vue的nextTick解决DOM更新与jsplumb操作之间的同步问题,确保在节点渲染完成后添加端口和连线。此外,还提醒了在多个流程图实例中保持唯一节点ID的重要性,并列举了其他开发者遇到的相关问题。
摘要由CSDN通过智能技术生成

简介

我在项目中使用了typescript+vue+jsplumb作为流程图框架。

问题

我在容器中使用的是v-for指令渲染。

  • 从配置文件中读取流程图的json并且存入this.items变量中
  • 通过v-for指令,调用this.item,渲染一系列组件作为流程图的节点。
  • this.paintFlowchart方法中进行端口Endpoint和连线Connector的添加。

代码:

mounted(){
	this.items = JSON.parse(JSON.stringify(demoGraph));
	this.paintFlowchart();
}

编译运行,控制台报错TypeError: Cannot read properties of null (reading 'parentNode')。同时,在前端网页中,只有节点、不见连线(Connector)和端口(Endpoint)。挠头很久百思不得解。最后查阅了Vue的属性,终于得到了答案。

解决

添加一句this.$nextTick(),即可解决问题。
这里的nextTick的作用是,this.items已经被更新,可是DOM还没有发生更新。

jsplumb是通过访问dom来添加节点上的端口和连线的。如果不用nextTick,当调用绘制函数的时候,流程图的节点还没有被渲染上去。由此,如果直接调用this.paintFlowcharth渲染端

Vue.js 3 ,遇到 "Cannot read properties of null (reading 'parentNode')" 这样的错误通常是由于尝试访问一个null或未定义的对象的父节点。这可能发生在以下几个情况: 1. **组件实例没有挂载**:如果在数据初始化之前尝试访问元素,可能会导致这个错误。确保你在引用DOM元素前,该元素已经被Vue实例正确地挂载到页面上。 ```javascript export default { mounted() { this.myElement = document.querySelector('#my-element'); // 在这里处理元素 } }; ``` 2. **条件渲染的无效路径**:检查你的模板是否在v-if或v-show指令下访问了未被渲染的节点。 ```html <div v-if="showElement" @click="handleClick">...</div> // 如果showElement一开始为false并且没有改变过,会报错 ``` 修复方法是确保`showElement`在初始时是可判定的(非null)。 3. **回调函数的错误**:在事件监听器或其他异步操作,确保你的回调函数里处理的是已存在的元素。 ```javascript this.$nextTick(() => { if (this.myElement) { this.myElement.parentNode.removeChild(this.myElement); } }); ``` 4. **销毁后的元素**:如果你尝试在组件卸载后继续访问其元素,也会得到这个错误。在适当的地方移除对已销毁组件的引用。 为了解决这个问题,你需要根据具体的上下文定位并修复代码的潜在空对象引用。针对每个场景分别检查,并使用 `?.` 或者 `|| null` 来安全地访问属性,防止null异常。同时记得添加适当的错误处理和日志记录,以便更好地追踪问题。如需更多帮助,请提供具体代码片段以供分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值