vant中Dialog与自动引入插件unplugin-vue-components冲突的问题
最近碰到一个巨奇葩的问题,项目中采用了unplugin-vue-components,但是vant的组件引入又是import手动按需引入,加上一些很奇怪的配置,导致项目配置变得复杂了,于是抽空将项目的配置全部梳理了一遍,并将import手动按需去除,全部采用自动引入的方式,通过分析打包后的包体,可以看到减少了100kb左右的大小,效果非常可观。
但是问题也出在这了,当我使用自动引入的时候,vant的Dialog组件出现了问题,表现为:当我通过组件的形式使用时,弹窗会自动打开,显示还有问题,但是查看v-model:show变量是false;我开始以为是样式问题,单独引入dialog样式无效,但是注释整个弹窗组件,弹窗就不会出现了,说明问题就在这里。
查了好久,最后在一个关闭的iss中找到了原因!
Issues:vue3 dialog 组件调用无效,并默认弹出,关闭后无法打开
原因是因为自动引入组件的插件,在检测到van-dialog
标签时,会直接调用Dialog函数来注册,根本是因为vant将import { Dialog } from "vant"
引入Dialog的默认值是一个函数调用方式,这就导致在components
注册组件时,注册的是函数而不是组件,vant的Dialog组件是Dialog.Component
。
如果你手动引入并局部注册也是无效的,因为unplugin-vue-components最后会覆盖你的配置。
目前的解决办法就是自定义组件名:
import { Dialog } from "vant";
export default {
components: {
'v-dialog': Dialog.Component,
},
}
使用的时候通过自定义组件名使用:
<v-dialog v-model:show="show">
hello
</v-dialog>
此时问题得以解决,vant官方的做法也很粗暴,你上vant4就没事了,我尼玛!
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据