[qiankun]乾坤微前端报错:Error in event handler for “updatePopper“: “TypeError: Failed to execute...“

解决微前端qiankun中子应用(element组件动态加载的元素)样式丢失的问题 项目使用了微前端qiankun,子应用中使用的是element组件库,当有el-select组件的子应用插入父应用的弹窗中初看效果是正常的,但是当点击el-select组件时发现组件下拉框中下拉列表样式丢失,后来在主应用中查看源码发现动态加载的el-select下拉列表DOM是动态插入到主应用中,因为在qiankun中应用间的样式是隔离的导致下拉列表没有样式,于是重写了document.body.appendChild方法......... 阅读详情

​
最近在使用qiankun框架对vue子应用进行拆分时,出现了此问题:在子应用使用element中的下拉框,会被定位到父应用的顶部,丢失了top的距离,同时控制台报错如下:

​

报错原因

element中的下拉框是通过appendChild的方式添加到对应的位置,而在使用的时候可能主应用和子应用都使用了element,子应用内下拉框无法准确识别,因此appendChild到了父应用上。

一、解决方法一


首先在【父应用】内若开启了沙箱的strictStyleIsolation,需要关闭,没有就不管


既然是appendChild方法无法识别子应用内,那么就在【子应用内】重写appendChild方法;在项目根文件内(main.js),生成实例render方法中改变append到子应用中。

 
// 顶部定义一个全局的originFn,最后卸载时需要还原给父应用
let originFn = document.body.appendChild.bind(document.body)
 
// 实例生成
function render(props = {}) {
  console.log('routes ', routes);
  const { container } = props;
 
  redirectPopup(container)
 
  const router = initRouter()
  // 为了避免根 id #app 与其他的 DOM 冲突,需要限制查找范围
  instance = new Vue({
    router,
    store,
    render: h => h(App),
  }).$mount(container ? container.querySelector('#app') : '#app');
 
// 重写子应用的element的appendChild方法 element组件弹出框挂在到子应用内
function redirectPopup(container) {
    // 子应用中需要挂载到子应用的弹窗的className,用作标记
    const addPopup = 'el-select-dropdown el-popper el-zoom-in-top-leave el-zoom-in-top-leave-active'
    const editPopup = 'el-select-dropdown el-popper'
    const whiteList = [addPopup, editPopup]
  
    // 保存原有document.body.appendChild方法
    let originFn = document.body.appendChild.bind(document.body)
  
    // 重写appendChild方法
    document.body.appendChild = (dom) => {
        // 根据标记,来区分是否用新的挂载方式
        if (whiteList.includes(dom.className)) {
            container.querySelector('#app').appendChild(dom)
        } else {
            originFn(dom)
        }
    }
  }
 
 
/**
 * 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例
 */
export async function unmount() {
  instance.$destroy();
  instance.$el.innerHTML = '';
  instance = null;
  router = null;
  document.body.appendChild = originFn;  // 卸载时还原append方法
  removeRouter()
}

二、解决方法二

如果第一种方法没能解决弹出框的定位问题,element中也给出了一个定位解决方案

每一个下拉框中添加这个属性popper-append-to-body: false; 只是通常我们项目中的下拉框数量比较多,若是一个一个添加就较为麻烦,最好把三方引用作为官方组件

三、解决方法三

 github上也有类似的问题,估计是2.10.x版本的都有问题,建议降低版本到2.9.3尝试: https://github.com/umijs/qiankun/issues/2408

使用微前端(qiankun),解决样式污染问题 使用微前端拆分巨石项目,主应用使用VUE2.0+Element,子应用同样使用VUE2.0+Element。由于主应用和子应用使用了相同的框架,多数元素的class类名相同,子应用与主应用样式隔离不彻底,会导致页面样式错乱。完全使用qiankun自带的沙箱隔离会遇到一些坑。 阅读详情

相关推荐

vue2/3 - 微前端qiankun报错Error in event handler for “updatePopper“: “TypeError: Failed to execute ‘get‘“

vue2,vue3,nuxt.js,qiankun,微前端,乾坤,vue 微前端,vue qiankun报错,Error in event handler for "updatePopper": "TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.",主应用的appendChid也会被重写了,这个咋办,关闭沙箱,详细解决办法,还是不行,关闭了,升级,更新,依旧报错

✅ 精选推荐文章 2739

[qiankun]报错:Error in event handler for “updatePopper“: “TypeError: Failed to execute...“

[qiankun]报错:Error in event handler for "updatePopper": "TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'."

Yi_qian的博客 1887

手把手教你用STM32F103C8T6驱动CLRC663国产NFC模块(兼容A/B/F/15693卡)

本文详细介绍了如何使用STM32F103C8T6驱动国产CLRC663 NFC模块,支持ISO14443A/B、Felica和ISO15693协议。从硬件设计、协议适配到状态监控,提供完整的工程实现方案,适用于智能门锁、支付终端等应用场景。

weixin_30689307的博客 446

el-popover触发元素位置改变后更新弹出框的偏移位置

但是如果触发元素位置发生变化时,如根据弹框选择内容,会显示或隐藏对应的元素,从而导致弹出框触发元素的位置的变化,此时触发元素位置变化了,但是弹出框还在变化之前的位置。2.监听导致触发元素位置变化的事件,调用组件updatePopper方法。el-popover的使用如下:包含一个触发元素和一个弹出框元素。1.给el-popover设置ref属性。

lingliu0824的博客 4887

基于深度学习卷积神经网络的医学图像乳腺癌分类

一、项目背景与意义乳腺癌是女性最常见的恶性肿瘤之一,其早期发现和治疗对于提高患者的生存率和生活质量至关重要。然而,乳腺癌的诊断通常依赖于医生的经验和主观判断,这不仅耗时而且可能存在误差。近年来,深度学习技术特别是卷积神经网络(CNN)在图像处理领域取得了显著进展,为乳腺癌的自动分类提供了新的解决方案。本项目旨在利用深度学习卷积神经网络构建一套高效、准确的医学图像乳腺癌分类系统,辅助医生进行乳腺癌的早期诊断和治疗。二、技术实现。

2301_79810943的博客 976

CarSim转向控制对比指南:开环扭矩控制vs转角控制(附Simulink连接示例)

本文深入对比了CarSim中车轮转角控制与开环扭矩控制的核心原理与适用场景。开环扭矩控制能激活完整的转向系统动力学,更适用于EPS控制策略开发与驾驶员在环仿真等对真实性要求高的场景。文章提供了详细的Simulink接口配置步骤与连接示例,为车辆动力学仿真工程师提供了清晰的决策与实操指南。

weixin_29199873的博客 479

Popover 弹出框内容动态撑开溢出

首先给组件一个ref 然后在里面内容撑开操作的后面写如下代码 就可以解决el-popover弹出框溢出到屏幕外边的问题

qq_44428688的博客 1692

大学物理第二章 质点动力学详解

大学物理第二章 质点动力学概念详解

weixin_63026364的博客 1万+

[qiankun]微前端踩坑日记

5月17日 Error in event handler for "updatePopper": "TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element' 出现情况在是自已用在使用 el-select Tooltip 等组件时候会报错 原因解决方法 严格模式设置成false就可以 strictStyleIsolation: false ...

点滴 1706

MFC 修改CheckBox的文本颜色方法

设置主题 这一步是必须的,不可省略。 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主题 HWND

Kim的博客 2249

Aspose Java 25.10 版本深度破解:基于字节码修改的实战指南

本文提供了Aspose Java 25.10版本基于字节码修改的实战指南。详细介绍了如何通过Javassist工具逆向分析并修改Aspose Cells、Words、Slides及PDF组件的许可证验证逻辑,从而实现绕过限制,并完成最终的打包与功能验证。

stone的博客 1364

整理element UI的常见问题

常见问题form 下面只有一个 input 时回车键刷新页面表格固定列最后一行显示不全气泡确认框文档里的confirm事件不生效输入框用正则限制但绑定值未更新去除type="number"输入框聚焦时的上下箭头只校验表单其中一个字段弹窗重新打开时表单上次的校验信息未清除表头与内容错位表单多级数据结构校验问题表格套input动态验证表格跨分页多选根据条件高亮行并去除默认hover颜色表单不想显示label但又想显示必填星号怎么办table 内嵌 input 调用 focus 方法无效表格内容超出省略el-tr

lztry_的博客 1704

CLCD土地覆盖数据在ArcGIS中的实战应用:从导入到空间分析的完整指南

本文详细介绍了CLCD土地覆盖数据在ArcGIS中的实战应用,从数据导入到空间分析的完整流程。涵盖坐标系转换、数据质量检查、土地利用变化检测等核心技术,并分享城市扩张模拟和跨数据集融合等高级应用技巧,帮助研究者高效利用这一权威数据集进行环境监测和城市规划。

weixin_29292535的博客 597

element ui 中 Popover 组件定位不精准的问题

Popover 内部数据动态获取到之后,Popover 尺寸变化导致的定位不准确

dark_cy的博客 5132

泰凌微8258入门教程 基础篇①——Bluetooth® SIG Mesh 快速上手

Bluetooth® SIG Mesh Quick Start

6730

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

vue下el-popover组件实现滚轴跟随功能

vue中el-popover组件点击弹出内容的情况下,滚动鼠标,实现弹出内容和组件不分离

2728

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

一份 ElementUI 问题清单

持续更新 1.form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为,给el-form 加上@submit.native.prevent就行了 <el-form inline @submit.native.prevent> <el-form-item label="订单号"> <el-input v-model="query.orderNo" :placeholder="输入订单号查询" cleara

qq_42058949的博客 526

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

组件内部watch后切换数据报错Error in callback for watcher “xxxx“

报错信息: 报错代码: 百度了一下是因为这里写了箭头函数,导致this指向为父级作用域上下文,不是vue实例导致 修改为: progressData: { handler: function(newValue, oldValue) { this.setChartData(newValue) }, deep: true, }, ...

JiAyInNnNnN123的博客 2184

第十四篇:Error in callback for watcher “options“: “TypeError: Cannot read properties of null

是因为我在调用编辑接口的时候传参数的时候,直接用delete 删掉了这个参数,因为编辑接口不需要这个字段所以我当时直接删掉了,delete慎用删掉的话就是直接把这个字段删掉了可能会有别的影响,所以我拆分出来传对应的参数就不报错了。

maliyao4233的博客 1990

TypeError: Failed to execute ‘createObjectURL‘ on ‘URL‘: Overload resolution failed

但是也没有出现“TypeError: Failed to execute ‘createObjectURL’ on ‘URL’: Overload resolution failed”报错,而且a.download = '二维码.png’变成了a.download = ‘二维码’,也成功下载了图片。也没有“TypeError: Failed to execute ‘createObjectURL’ on ‘URL’: Overload resolution failed”这个报错了,成功下载了图片。

qq_46302247的博客 1万+

[Vue warn]: Error in callback for watcher “fileList“: “TypeError: Cannot create property ‘uid‘ on

大家好,今天和大家分享一个项目报错及这个报错的解决方案。我当前使用的是Vue3+element plus开发的一个录音的后台管理,在之前的文章也发过一篇上传录音的文章,这两个是同一个项目,是因为更改了一些需求,现在进行更改出现了报错,下面就来讲讲这个报错的原因和解决方案。希望本篇文章能够帮助到您,让我们共同提升共同进步吧!

SqlloveSyn的博客 2402

VUE页面报错Failed to execute ‘setAttribute‘ on ‘Element‘: ‘,

Failed to execute 'setAttribute' on 'Element': ',

万物不及香香的博客 3480

qiankun加载vue子应用报错[import-html-entry]: error occurs while executing normal script

网上查询该报错信息发现和我遇见的问题不同,发现别人都是因为JS文件引用出的问题,将JS文件引用改为html引用的方式,同时添加ignore属性,如: <script src="..." ignore></srcipt> 而我并未引用js,经自已排查后发现问题出在子应用以下部分: if (window.__POWERED_BY_QIANKUN__) { __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_Q

好记性不如烂笔头 1万+

element-ui select和date-range-picker的popper嵌套问题记录

选择开始日期后为了保持select的下拉框,在dateRangePick的onpick中重新打开了select,最后选择在onpick重新打开select的下拉框后重新调用updatePopper()从而导致select的zindex增加,盖住了日期的pane。

qq_41766081的博客 314

vue中watch的用法总结以及报错处理Error in callback for watcher "checkList"

  首先确认 watch是一个对象,一定要当成对象来用。 对象就有键,有值。   键:就是你要监控的那个家伙,比如说$route,这个就是要监控路由的变化,或者是data中的某个变量。   值可以是函数:就是当你监控的家伙变化时,需要执行的函数,这个函数有两个形参,第一个是当前值,第二个是变化后的值。   值也可以是函数名:不过这个函数名要用单引号来包裹。   第三种情况厉害了。 值是包括...

weixin_34153893的博客 1万+

Failed to execute 'scrollTo' on 'Window': No function was found that matched the signature provided.

vue项目在本地使用scrollTo这个方法的时候没有问题,部署的时候报这个错误。 window.scrollTo(0,200);//同scrollTo(0,200),scroll(0,200)默认为window调用。 toTop(){//跳转顶部 //scrollTo(0,800) //scroll(0,0) window.scrollTo({ ...

pyf18809486818的博客 6266
上一篇: npm仓库镜像源
下一篇: 1.什么是重绘,什么是回流?如何减少回流?
develop_csdn_LGQ
博客等级 码龄10年 21粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值