Vant Toast怎么在Vue3里全局调用不生效?
我在Vue3项目里按文档引入了Vant的Toast,但在组件里直接调用this.$toast或者Toast(‘提示’)都没反应,控制台也不报错,这是为啥?
我试过在main.js里use Toast,也试过局部引入,但都不行。下面是我的引入方式:
import { createApp } from 'vue'
import App from './App.vue'
import { Toast } from 'vant'
const app = createApp(App)
app.use(Toast)
app.mount('#app')
然后在组件方法里写 Toast('加载成功'),结果页面啥也没弹出来……是不是Vue3要用别的调用方式?
app.use(Toast)这种方式是行不通的。直接用这个:
然后在组件里这样调用:
问题就在于Vant 3.x里Toast是个函数,不是插件。你之前
app.use(Toast)相当于什么都没干,因为它根本不是那个用法。直接import
showToast就能用了,不用整那些花里胡哨的。问题分析
你用的这种方式是Vant 3.x的写法。在Vant 4.x里,Toast已经从组件改成了函数,app.use(Toast)这种注册方式已经不存在了。你调用Toast('加载成功')不生效,是因为这个方法根本不存在,Vant 4.x里压根没导出Toast这个东东。
解决方案
直接改用Vant 4.x的函数式调用:
Vant 4.x的Toast API
不只是showToast,还有几个快捷方法:
总结
Vant 4.x的设计理念变了,Toast、Dialog、Notify这些都改成了函数式调用,不再需要use注册。控制台不报错是因为Vant根本没有导出Toast这个命名空间,你调用的是一个undefined值,JS对undefined调用方法才会报错,但你只是调用了Toast这个函数(虽然它不存在),所以静默失败了。
如果你是从旧项目迁移过来的,记得把所有的Toast.xxx()改成showToast相关的方法就行。