Vue3 如何在 <script setup> 语法糖中使用 beforeRouteEnter
Vue 3 的官方路由版本为 Vue Router 4.x , 所以本文基于 Vue 3 + Vue Router 4.x , 请注意项目依赖版本。
如果你在项目里把所有大大小小的业务逻辑在全局路由守卫if...else
一把梭那么本文也许不适合你。
可以定义 beforeRouteEnter
的地方有很多,不同的地方有不同的用途,今天在敲 Vue 3 项目时遇到一个页面需要单独处理的逻辑,但我使用的是 <script setup>
语法糖,因为在 setup
周期中路由解析完成,组件已创建,所以只有 onBeforeRouteLeave
和 onBeforeRouteUpdate
两个导航守卫可以使用。可以在下方相关链接查看文档。
要在路由解析前处理逻辑,难道只有放弃 <script setup>
的多个优势使用 export default ...
吗?当然不是~
Vue 官方和社区的大牛们必然已经遇到过这个情况和需求,经过搜索得到了目前的一种解决方案,虽然并不是很简洁:
具体讨论可以见:Usage of beforeRouteEnter with <script setup>
我用的 TS 所以下面是我的代码:
1 | <script lang="ts"> |
你没看错,就是原来写在 <script setup>
中的逻辑不用变,另外写一个普通的 <script>
标签。
另外你可能有疑问:为什么不在路由定义中写路由独享守卫(Per-Route Guard)呢,这样不是更简单?
我的答案是:
各司其职,在路由定义中书写业务逻辑写中会打破边界(嗯,一切罪恶的开始~)
路由定义在项目中更适合担任目录、索引的角色,任何接触项目的开发者都需要这么一个地方,特别是刚接触项目的开发者。就像一本书,你见过有谁会将章节的内容写到目录中呢?