一、如何使用vue-router进行路由跳转
1、标签形式
//<router-link> 默认会被渲染成一个 `<a>` 标签
<router-link to="/home">前往home页面</router-link>
2、编程式形式
// 字符串
router.push('home')
// 对象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'homeName'})
二、如何进行传值和取值
// 命名的路由
this.$router.push({ name: 'homeName', params: {id:'1',state:0}}) //对home页面进行id为1,state为0的传值。
//此方法需在router.js中配置
{
path: '/home/:id/:state',
name: 'homeName',
component: () => import('../pages/index/home.vue')
},
//取值
this.$route.params.id
this.$route.params.state
// 命名的路由
this.$router.push({ path: '/home', query: {id:'1',state:0 }}) //对home页面进行id为1,state为0的传值。
//取值
this.$route.query.id
this.$route.query.state
三、路由的前进和返回
// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)
// 后退一步记录,等同于 history.back()
router.go(-1)
// 后退 3 步记录
router.go(-3)
四、全局守卫
//如需判断是否登录则在router.js中加入meta路由元信息
{
path: '/home/:id/:state',
name: 'homeName',
component: () => import('../pages/index/home.vue'),
meta:{
requireAuth:true //需要验证登录状态
}
},
//全局守卫判断(可写在main.js中)
import router from './router'
import store from './store'
//router.beforeEach是在页面加载前
//router.beforeResolve是在页面加载后
router.beforeEach((to, from, next) => {
if (to.meta.requireAuth == true && !isAuthenticated){
next({ path: '/Login' })
} else{
next()
}
})
//to: Route: 即将要进入的目标 路由对象
//from: Route: 当前导航正要离开的路由
//next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
//next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
//next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
//next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。
//next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。
五、Vue每次点击跳转页面位置回恢复在顶部
router.beforeEach((to, from, next) => {
// 让页面回到顶部
// chrome
document.body.scrollTop = 0;
// firefox
document.documentElement.scrollTop = 0;
// safari
window.pageYOffset = 0;
// 调用 next(),一定要调用 next 方法,否则钩子就不会被销毁
这三句很重要,放进导航首位里面,就成功了,希望对你有帮助
next()
})