如何使用vue-router

一、如何使用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()
 })

猜你喜欢

转载自blog.csdn.net/pgzero/article/details/114121437