一、 简介
让用 Vue.js 构建单页应用变得轻而易举(简单来说就是通过hash跳转)
二、安装
//npm
npm install vue-router@4
//yarn
yarn add vue-router@4
三、写法
// router/index.js
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
import {dynamicRoutes} from "./routers"
const routes: Array<RouteRecordRaw> = dynamicRoutes
const router = createRouter({
history: createWebHistory(),
routes,
});
export default router;
-----------------------------------------------------------------
// main.js
import { createApp } from "vue";
const app = createApp(App);
import App from "./App.vue";
//引用路由
import router from "./router/index";
app.use(router).mount("#app");
四、history配置
history | createWebHistory() |
---|---|
hash | createWebHashHistory() |
abstract | createMemoryHistory() |
// 新写法
import { createRouter, createWebHistory } from 'vue-router'
import routes from './routes'
const router = createRouter({
history: createWebHistory(),//history
routes
})
export default router
五、组件使用
- 在 setup 中访问路由和当前路由
因为我们在 setup 里面没有访问 this,所以我们不能再直接访问 this. r o u t e r 或 t h i s . router 或 this. router或this.route。作为替代,我们使用 useRouter 函数:
- useRouter(跳转), useRoute(获取路由参数)
import { useRouter, useRoute } from 'vue-router'
export default {
setup() {
const router = useRouter()
const route = useRoute()
},
}
六、路由传值
useRouter(路由方法), useRoute(路由属性)
- 传递参数
import {defineComponent } from "vue";
import { useRouter } from 'vue-router'
export default defineComponent({
setup() {
const $router = useRouter()
// 命名路由
let toAbout=()=>{
$router.push({name:'About',params:{id:1}}) //传递参数
}
//query传值
let toNews=()=>{
$router.push({path:'/news',query:{id:2}}) //传递参数
}
return {
toAbout,
toNews
};
}
})
- 接收参数
import {defineComponent } from "vue";
import { useRoute } from 'vue-router'
export default defineComponent({
setup() {
const $route = useRoute()
onMounted(()=>{
console.log($route.params.id) // 打印 params 的参数
console.log($route.query.id) // 打印 query 的参数
})
},
})
七、路由守卫
- 全局路由守卫
- beforeEach(to, from, next) 全局前置守卫,路由跳转前触发
将next取消了,可写可不写,return false取消导航,undefined或者是return true验证导航通过
- beforeResolve(to, from, next) 全局解析守卫 在所有组件内守卫和异步路由组件被解析之后触发
- afterEach(to, from) 全局后置守卫,路由跳转完成后触发
- 路由独享守卫
beforeEnter(to,from,next) 路由对象单个路由配置 ,单个路由进入前触发
- 组件路由守卫
- beforeRouteEnter(to,from,next) 在组件生命周期beforeCreate阶段触发
- beforeRouteUpdadte(to,from,next) 当前路由改变时触发
- beforeRouteLeave(to,from,next) 导航离开该组件的对应路由时触发
参数说明:
to: 即将要进入的目标路由对象
from: 即将要离开的路由对象
next(Function):是否可以进入某个具体路由,或者是某个具体路由的路径