vue2 路由24 声明式导航 编程式导航 路由守卫
用户点击了页面的路由链接,会导致hash值发生变化,路由监听到hash值的链接发生的变化,会把对应的组件渲染到当前的页面中
安装:
直接安装router的话会安装最新版的,最新版仅支持vue3,安装后报错的请检查一下自己的npm版本是否过高
npm i vue-router@3.5.2 -S
index:
import Vue from 'vue' import VueRouter from 'vue-router' // 调用vue.use函数,把VueRouter安装为vue插件 Vue.use(VueRouter) // 创建路由的实例对象 const router = new VueRouter() // 向外贡献路由的实例对象 export default router
main:
import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'
import router from './router/index'
Vue.config.productionTip = false
new Vue({
render: h => h(App),
router
}).$mount('#app')
正常使用:
app.vue: 首页 // 占位符来的,必须要写
router: index.js: import Vue from 'vue' import VueRouter from 'vue-router' import Home from '@/components/Home.vue' import Movie from '@/components/Movie.vue' import About from '@/components/About.vue' import Tab1 from '@/components/tabs/Tab1.vue' import Tab2 from '@/components/tabs/Tab2.vue' import Ttt1 from '@/components/tabs/tab/Ttt1.vue' import Ttt2 from '@/components/tabs/tab/Ttt2.vue' // import Login from '@/components/Login.vue' // import Main from '@/components/Main.vue' // 调用vue.use函数,把VueRouter安装为vue插件 Vue.use(VueRouter) // 创建路由的实例对象 const router = new VueRouter({ routes: [ // 重定向地址,强制跳到首页 { path: '/' , redirect: '/home' }, // 路由规则 { path: '/home' , component: Home }, { path: '/movie/:mid' , component: Movie, props: true }, { path: '/about' , component: About, // 重定向 redirect: '/about/tab1' , children: [ { path: '' , component: Tab1 }, { path: 'tab2' , component: Tab2, redirect: '/about/tab1/ttt1' , children: [ { path: '' , component: Ttt1 }, { path: 'ttt2' , component: Ttt2 } ] } ] } ] }) // 向外贡献路由的实例对象 export default router
Movie 组件 --- {{ $route.params.mid }} --- {{ mid }}
编程式路由
后退页面: this .$router.go(-1)
或:
路由守卫:
可以控制路由的访问权限
router.beforeEach((to, from, next) => { // to是将要访问的路由的信息对象 // from 是将要离开的路由信息对象 // next是一个函数,调用next表示放行 })
强制跳转到登录页:
路由案例:
全局前置守卫:
router.beforeEach((to, from, next) => {
// to是将要访问的路由的信息对象
// from 是将要离开的路由信息对象
// next是一个函数,调用next表示放行
// next('/Login')
// 分析:
// 需要先拿到用户的hash地址
// 判断hash地址是否等于后台主页
// 如果等于后台主页需要先跳转到login页登录先
// 如果等于后台主页,则需要读取localStorage中的token值,有token值则放行,没有则跳转到login页
// 如果不等于后台主页则直接放行
if (to.path === '/main') {
const token = localStorage.getItem('token')
console.log(token)
if (token) {
next()
} else {
next('/login')
}
} else {
next()
}
})
代码改变了我们,也改变了世界