引入 setup
和 Vue 的组合式 API,开辟了新的可能性,但要想充分发挥 Vue Router 的潜力,我们需要使用一些新的函数来代替访问 this
和组件内导航守卫。
在 setup
中访问路由和当前路由
因为我们在 setup
里面没有访问 this
,所以我们不能再直接访问 this.$router
或 this.$route
。作为替代,我们使用 useRouter
和 useRoute
函数:
route
对象是一个响应式对象,所以它的任何属性都可以被监听,但你应该 避免监听整个 route
对象。在大多数情况下,你应该直接监听你期望改变的参数。
请注意,在模板中我们仍然可以访问 $router
和 $route
,所以不需要在 setup
中返回 router
或 route
。
导航守卫
虽然你仍然可以通过 setup
函数来使用组件内的导航守卫,但 Vue Router 将更新和离开守卫作为 组合式 API 函数公开:
组合式 API 守卫也可以用在任何由 <router-view>
渲染的组件中,它们不必像组件内守卫那样直接用在路由组件上。
页面刷新无法触发路由守卫,只有改变路由地址才会触发。
useLink
Vue Router 将 RouterLink 的内部行为作为一个组合式函数 (composable) 公开。它接收一个类似 RouterLink
所有 prop 的响应式对象,并暴露底层属性来构建你自己的 RouterLink
组件或生成自定义链接:
注意在 RouterLink 的 v-slot
中可以访问与 useLink
组合式函数相同的属性。