Vue路由高级用法

vue-router的高级用法

路由重定向

路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面。

通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向

const router = createRouter({
  history:createWebHashHistory(),
  routes:[
    {path:'/',redirect:'/home'}
    {path:'/home',component:MyHome},
    {path:'/movie',component:MyMovie},
    {path:"/about",component:MyAbout}
]
})

路由高亮

可以通过如下的两种方式,将激活的路由链接进行高亮显示:

  1. 使用默认的高亮 class 类

    /*在index.css全局样式表中,重新router-link-active的样式*/
    <style>
    .router-link-active{
        background-color:red;
        color:white;
        font-weight:bold;
    }
    </style>
    
  2. 自定义路由高亮的 class 类

    在创建路由的实例对象时,开发者可以基于 linkActiveClass 属性,自定义路由链接被激活时所应用的类名:

    linkActiveClass:'router-active'
    
  3. 嵌套路由

    通过路由实现组件的嵌套展示,叫做嵌套路由。

    1. 声明子路由链接和子路由占位符
    2. 在父路由规则中,通过 children 属性嵌套声明子路由规则

    声明子路由链接和子路由占位符

    在 About.vue 组件中,声明 tab1 和 tab2 的子路由链接以及子路由占位符。示例代码如下:

    <template>
      <h3>
          MyAbout组件
        </h3>
    <!--在此页面中声明两个子路由链接-->
    <router-link to="/about/tab1">tab1</router-link>
    <router-link to="/about/tab2"></router-link>
    
    <!--在关于页面中,声明tab1和tab2的路由占位符-->
    <router-view></router-view>
    </template>
    

    通过children属性声明子路由规则

    在 router.js 路由模块中,导入需要的组件,并使用 children 属性声明子路由规则。示例代码如下:

    import Tab1 from './components/tabs/MyTab1.vue'
    import Tab2 from './components/tabs/MyTab2.vue'
    
    const router = createRouter({
        routes:[
            {//about页面的路由规则
                path:'/about',
                component:About,
                children:[
                    {path:'tab1',component:Tab1},
    {path:'tab2',component:Tab2},
                ]
            }
        ]
    })
    

动态路由

动态路由指的是:把 Hash 地址中可变的部分定义为参数项,从而提高路由规则的复用性。在 vue-router 中

使用英文的冒号(:)来定义路由的参数项。示例代码如下:

{path:'/movie/:id',component:Movie}

通过动态路由匹配的方式渲染出来的组件中,可以使用 $route.params 对象访问到动态匹配的参数值。

<template>
<h3>
    MyMovie组件 --- {{$route.params.id}}
    </h3>
</template>

使用 props 接收路由参数

为了简化路由参数的获取形式,vue-router 允许在路由规则中开启 props 传参。示例代码如下:

{path:'/movie/:id',component:Movie}

<template>
  <h3>
      MyMovie组件 ---{{id}}
    </h3>
</template>

<script>
  export default{
      //使用props接收路由规则中匹配到的参数
      props:['id']
  }
</script>

编程式导航

通过调用 API 实现导航的方式,叫做编程式导航。与之对应的,通过点击链接实现导航的方式,叫做声明式导

航。例如:

  • 普通网页中点击 <a> 链接、vue 项目中点击 <router-link> 都属于声明式导航
  • 普通网页中调用 location.href 跳转到新页面的方式,属于编程式导航

vue-router 中的编程式导航 API

vue-router 提供了许多编程式导航的 API,其中最常用的两个 API 分别是:

  1. this.$router.push(‘hash 地址’)

    • 跳转到指定 Hash 地址,从而展示对应的组件
  2. this.$router.go(数值 n)

    • 实现导航历史的前进、后退

调用 this.$router.push() 方法,可以跳转到指定的 hash 地址,从而展示对应的组件页面。示例代码如下:

<template>
  <h3>
      MyHome组件
    </h3>
  <button @click="gootoMovie(3)">
      go to Movie
    </button>
</template>

<script>
  export default{
      methods:{
          gotoMovie(id){
              this.$router.push('/movie/${id}')
          }
      },
  }
</script>

调用 this.$router.go() 方法,可以在浏览历史中进行前进和后退。示例代码如下:

<template>
  <h3>
      MyHome组件
    </h3>
  <button @click="goBack">
      后退
    </button>
</template>

<script>
  export default{
      props:['id'],
      methods:{
          goBack(id){
              this.$router.go(-1)//后退到之前的组件页面
          }
      },
  }
</script>

命名路由

通过 name 属性为路由规则定义名称的方式,叫做命名路由。示例代码如下:

{
    path:'/movie:id',
    name:'mov',
    component:Movie,
    props:true,
}

注意:命名路由的 name 值不能重复,必须保证唯一性

使用命名路由实现声明式导航

为 <router-link> 标签动态绑定 to 属性的值,并通过 name 属性指定要跳转到的路由规则。期间还可以用

params 属性指定跳转期间要携带的路由参数。示例代码 如下:

<template>
  <h3>
      MyHome组件
    </h3>
  <router-link :to="{name: 'mov',params:{id:3}}">go to Movie</router-link>
</template>

<script>
export default{
    name:'MyHome',
}
</script>

使用命名路由实现编程式导航

调用 push 函数期间指定一个配置对象,name 是要跳转到的路由规则、params 是携带的路由参数:

<template>
  <h3>
      MyHome组件
    </h3>
  <button @click="gootoMovie(3)">
      go to Movie
    </button>
</template>

<script>
  export default{
      methods:{
          gotoMovie(id){
              this.$router.push({name:'mov',params:{id:3}})
          }
      },
  }
</script>

导航守卫

导航守卫可以控制路由的访问权限。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bestkasscn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值