vue-cli-service build --target wc --name my-foo foo.vue
该组件使用元素中的DatePicker
和Select
,这反过来又使用了封面下的一些旧版本的popper.js和伏波普。元素源存储库包含自己的popper.js和vue-popper,而不是使用npm包。元素中的popper.js文件只是表示{{version}}
,所以我不确定它有多老,或者它是否是由元素开发人员大量定制的。它看起来不太像最新popper.js文件。
实际上,当DatePicker
或Select
在web组件中激活时,包含的Popper版本最终会引发错误:
[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
,开发工具在运行时使用web组件时在层次结构中显示#shadow-root (open)
。
较早版本的popper.js曾与shadowRoot
有问题,但早在2016年,至少有一款合并拉请求解决了这个问题。它看起来不像元素包含一个能够在阴影根中正常工作的版本,考虑到这个问题在很久以前就已经解决了,而且元素是一个Vue友好的库,这是令人惊讶的。
有人能在不放弃风格隔离的情况下提出解决shadowRoot
问题的方法吗,或者使用最新的vue-popper包而不是自己包含的版本来强制使用元素的干净方法?
发布于 2020-04-20 22:59:35
忘了它吧。使用更好的popover工具:https://www.npmjs.com/package/@soldeplata/popper-vue
https://stackoverflow.com/questions/54352781
复制