Vue-router路由

149 阅读2分钟

路由:本质就是映射

前端路由:就是切换url地址,渲染不同的组件

Vue-Router基本使用

第一步:创建路由需要映射的组件,就是打算要显示的页面

第二步:通过createRouter创建路由对象,并且传入routes和history模式;

配置路由映射:组件和路径映射关系的routes数组

创建基于hash或者history的模式

import { createRouter ,createWebHashHistory} from "vue-router";
import Home from "../views/Home.vue"
import About from "../views/About.vue"

const router = createRouter({
  history: createWebHashHistory(),
  routes:[
    // 重定向默认路径
    {path:'/',redirect:'/home'},
    {path: "/home", component: Home},
    {path: "/about", component: About},

  ]
})

export default router

第三步:使用app注册路由对象(use方法)

import { createApp } from 'vue'
import router  from './router'
import App from './App.vue'

const app = createApp(App)
app.use(router)
app.mount('#app')

第四步:路由使用:通过

<template>
  <div>
    app
    <router-link to="/home">Home页面</router-link>
    <router-link to="/about">Avout页面</router-link>
    <router-view></router-view>
  </div>
</template>
<script setup>

</script>
<style scoped>
  
</style>

路由的默认路径:

我们在routes中配置一个新映射:

path配置的是根路径 /

redirect是重定向,也就是我们将根路径重定向到组件的路径

import { createRouter ,createWebHashHistory} from "vue-router";
import Home from "../views/Home.vue"
import About from "../views/About.vue"

const router = createRouter({
  history: createWebHashHistory(),
  routes:[
    // 重定向默认路径
    {path:'/',redirect:'/home'},
    {path: "/home", component: Home},
    {path: "/about", component: About},

  ]
})

export default router

history模式:

import { createRouter, createWebHistory } from "vue-router"
const router = createRouter({
  history:creaetWebHistory
})

router-link

router-link事实上有很多属性可以配置:

to属性: 是一个字符串,或者是一个对象

  <router-link to="/home">Home页面</router-link>
  <router-link to="/about">Avout页面</router-link>

replace属性:

设置replace属性的话,当点击时,会调用router.replace() ,而不是router.push

active-class属性:

设置激活a元素后应用的class,默认时router-link-active

<style scoped>
  .router-link-active {
    color: red;
    font-size: 20px;
  }
</style>

也可以自己设置class:

<template>
  <div>
    app
    <router-link to="/home" active-class="active">Home页面</router-link>
    <router-link to="/about" active-class="active">Avout页面</router-link>
    <router-view></router-view>
  </div>
</template>

exact-active-class属性:

链接精准激活时,应用与渲染的的class,默认是router-link-exact-active

路由懒加载包处理

// 分包处理并命名 (也叫路由懒加载)
const Home = () => import(/* webpackChunkName:'home' */'../views/Home.vue')
const About = () =>import(/* webpackChunkName:'about' */"../views/About.vue")

动态路由和路由嵌套

    {path: "/user/:id", component: () => import("../views/User.vue")},

获取动态路径的值

<template>
  <div>
   <h1> 我是User组件</h1>
   <!-- 再模板中获取id -->
   <h2>User:{{$route.params.id}}</h2>
  </div>
</template>
<script setup>
// 再setup中获取
  import { useRoute } from 'vue-router';
  const route = useRoute()
  console.log(route.params.id)

</script>
<style scoped>
  
</style>

路径错误要展示的页面

    {path:"/:pathMatch(.*)",component:() =>import('../views/NotFound.vue')}

路由的编程式导航

动态管理路由

路由导航守卫钩子