最近碰到一个巨奇葩的问题,项目中采用了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就没事了,我尼玛!

分类: vue 项目实战 标签: vant自动引入dialogunplugin-vue-components

评论

暂无评论数据

暂无评论数据

目录