• Vue Router路由


    Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转。

    一、常用组件

    请注意,我们没有使用常规的 a 标签,而是使用一个自定义组件 router-link 来创建链接。这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。

    1. <router-link to="/">Go to Homerouter-link>
    2. <router-link to="/about">Go to Aboutrouter-link>

    router-view #

    router-view 将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局。

    二、路由配置

    很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数

    1. //普通路由
    2. {
    3. path:"/user",
    4. name:"user",
    5. component:()=>import(xxx)
    6. }
    1. //传参
    2. {
    3. path:"/product/:id",
    4. name:"product",
    5. component:xxx
    6. }
    7. //在页面中获取
    8. $route.params.id
    1. //404路由
    2. //要配置在最后面
    3. {
    4. path:"*"
    5. }

    三、导航守卫

    正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中:全局的,单个路由独享的,或者组件级的。

    你可以使用 router.beforeEach 注册一个全局前置守卫:

    1. const router = createRouter({ ... })
    2. router.beforeEach((to, from) => {
    3. // ...
    4. // 返回 false 以取消导航
    5. return false
    6. })

    每个守卫方法接收三个参数:

    • to: 即将要进入的目标
    • from: 当前导航正要离开的路由
    • next 下一步

     

    1. const UserDetails = {
    2. template: `...`,
    3. beforeRouteEnter(to, from) {
    4. // 在渲染该组件的对应路由被验证前调用
    5. // 不能获取组件实例 `this` !
    6. // 因为当守卫执行时,组件实例还没被创建!
    7. },
    8. beforeRouteUpdate(to, from) {
    9. // 在当前路由改变,但是该组件被复用时调用
    10. // 举例来说,对于一个带有动态参数的路径 `/users/:id`,在 `/users/1` 和 `/users/2` 之间跳转的时候,
    11. // 由于会渲染同样的 `UserDetails` 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    12. // 因为在这种情况发生的时候,组件已经挂载好了,导航守卫可以访问组件实例 `this`
    13. },
    14. beforeRouteLeave(to, from) {
    15. // 在导航离开渲染该组件的对应路由时调用
    16. // 与 `beforeRouteUpdate` 一样,它可以访问组件实例 `this`
    17. },
    18. }

     四、路由元信息

    你可能希望将任意信息附加到路由上,如过渡名称、谁可以访问路由等。这些事情可以通过接收属性对象的meta属性来实现,并且它可以在路由地址和导航守卫上都被访问到。

    一个路由匹配到的所有路由记录会暴露为 $route 对象(还有在导航守卫中的路由对象)的$route.matched 数组。我们需要遍历这个数组来检查路由记录中的 meta 字段,但是 Vue Router 还为你提供了一个 $route.meta 方法,它是一个非递归合并所有 meta 字段的(从父字段到子字段)的方法

    1. router.beforeEach((to, from) => {
    2. // 而不是去检查每条路由记录
    3. // to.matched.some(record => record.meta.requiresAuth)
    4. if (to.meta.requiresAuth && !auth.isLoggedIn()) {
    5. // 此路由需要授权,请检查是否已登录
    6. // 如果没有,则重定向到登录页面
    7. return {
    8. path: '/login',
    9. // 保存我们所在的位置,以便以后再来
    10. query: { redirect: to.fullPath },
    11. }
    12. }
    13. })

    如果大家想了解更多可以去Vue Router进行学习。

  • 相关阅读:
    高性能MySQL实战第01讲:MySQL体系结构与存储引擎
    【微信小程序】在页面跳转时如何进行页面导航
    skywalking中gateway的拓扑图没有出现
    node前端常用
    《微信小程序》初识微信小程序
    多进程编程(五):信号量
    走进人工智能的大门:打造职业梦想的契机
    【Call for papers】IJCAI-2023(CCF-A/截稿日期: 2023年1月18日)
    力扣 SQL题目
    C++ Qt QModbusClient 的使用
  • 原文地址:https://blog.csdn.net/weixin_52474888/article/details/126181609