代码之家  ›  专栏  ›  技术社区  ›  MattP John

如何用shadowRoot修复VueJS web组件中的Element和popper.js错误?

  •  1
  • MattP John  · 技术社区  · 6 年前

    我创建了一个web组件 Vue CLI 3 Element :

    vue-cli-service build --target wc --name my-foo foo.vue
    

    组件利用 DatePicker Select from元素,它反过来利用 popper.js vue-popper 在被子下面。元素源存储库包含自己的popper.js和vue popper,而不是使用 净现值 包装。这个 popper.js 元素中的文件只是说 {{version}} 所以我不确定它有多旧,或者它是否被元素开发人员大量定制。看起来不像是 latest popper.js 文件。

    事实上,包含的Popper版本在 日期选择器 选择 在web组件内部激活:

    [Vue warn]: Error in callback for watcher "pickerVisible": "TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'."

    运行在Vue CLI生成的web组件之外,元素控件工作正常。经过深入研究,我发现Vue CLI 3生成的web组件包装器利用了 shadowRoot ,开发人员工具显示 #shadow-root (open) 在运行时使用web组件时的层次结构中。

    以前popper.js的旧版本在 树根 ,但至少有一个 merged pull request 早在2016年就解决了这个问题。它看起来不像Element包含的版本能够在影子根目录中正常工作,考虑到问题修复了多久,Element是一个对Vue友好的库,这令人惊讶。

    有没有人能建议 树根 不放弃样式隔离的问题,或者强制元素使用最新的vue popper包而不是它自己包含的版本的干净方法?

    0 回复  |  直到 6 年前
    推荐文章