解决了在 Ant Design Pro Vue 中使用 vuedraggable 时的 bug
条评论 | 0次浏览前段时间 clone 了 Ant Design Pro Vue 下来试着搭一个中后台来玩玩。今天因为添加了用于拖动排序的新组件 Vue.Draggable 后,页面中一直报错,页面也无法正常显示。
1 | TypeError: window.Vue.component is not a function |
网上查了报错,没有相同的情况,于是就开了他们的源码看了看。
在 vuedraggable/src
的最后找到了这次报错的出处:
1 | if (typeof window !== "undefined" && "Vue" in window) { |
说来奇怪,用的是 import 方式引入的 vuedraggable
为什么提示的 window.Vue
下的报错。照理说使用 UMD 的话,优先判断的应该是 node 中的 export,然后是 require 最后才是 window。而且 window 下应该没有挂载 Vue 实例才对,那为什么判断的表达式为true
了呢。
既然已经报错了,说明说 window.Vue 存在,并且是一个不同于 Vue.js 的同名对象。那么原先的 Vue 有可能不存在或者是被覆盖了。于是直接在控制台试了一下
1 | console.log(window.Vue); |
结果输出了一个 DOM 对象……
1 | <g id="Vue" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">…</g> |
我特么……这个 <g>
是一开始提到的 Ant Design Pro Vue 中 header 用到的 logo.svg……页面元素的 id 会自动挂载到 window 对象下……
有别于官方的 Ant Design Vue 在 header 中用到的是 src 为该 svg 的 base64 的 <img>
,也有别于这个项目的落地页的 header 中直接用的一张 png,他在项目里面用到的是 svg 源文件……所以这个 id="vue"
的元素影响了引入脚本的判断,导致报错。这个也太那啥了吧……
解决方法就是把这个 id 改成 AntVue 就解决了。
- 本文链接:https://blog.decay.fun/2019/03/22/fixed-a-weird-bug-when-using-ant-design-pro-vue-with-vue-draggable/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
分享View this article in English