FinClip小程序在Vue中嵌入后,页面跳转无法触发路由守卫?
我在用FinClip框架开发小程序时,把小程序容器嵌入到Vue项目里了。但发现当小程序内部页面跳转时,Vue的路由守卫beforeEach完全没反应,地址栏虽然变了路径,但控制台打的log一点都没触发。
已经按照文档引入了FinClip容器组件,代码结构是这样的:
<template>
<div>
<fin-clip-container id="appContainer" />
</div>
</template>
<script>
export default {
mounted() {
FinClip.start({ ... }).then(() => {
FinClip.navigateTo({ url: '/pages/index' })
})
}
}
</script>
我尝试在Vue Router里设置了mode为hash,也试过history模式都不行。用FinClip的监听API能收到小程序事件,但Vue自己的路由机制就是不生效,这该怎么处理啊?
可以试试这样:不要依赖Vue Router来监听小程序内部的跳转,而是用FinClip提供的事件监听方法。比如
FinClip.onPageShow或者FinClip.onRouteChange,这些能捕获到小程序的页面变化。像这样写:
如果你非要让Vue Router参与进来,那可能得自己写个映射表,把小程序的页面路径和Vue的路由对应起来,再手动调用
this.$router.push。不过我觉得直接用FinClip的事件监听更简单,毕竟它俩本来就是两套体系。希望这个方法对你有帮助!如果还有问题可以再聊聊。
解决办法是这样:你需要用FinClip提供的事件监听接口,手动去同步小程序的跳转到Vue的路由上。大概思路是,在FinClip页面变化时,主动调用 Vue Router 的
push或replace方法。比如你可以这样做:
这样做的好处是,虽然Vue的
beforeEach守卫不会自动触发,但通过手动更新路由,后面的导航守卫beforeRouteUpdate等还是可以用上的。另外提醒一下,记得在小程序路径和Vue路径之间做个映射关系,不然直接用小程序的路径可能会导致命名冲突或者格式不匹配的问题。前端这块这种跨框架整合的事情挺常见的,多折腾几次就顺了。