关于vue路由和路由拦截的一些小问题

// 总的来说两个问题

// 1.路由重复点击报红错误

// 解决方法:重写push方法,cathc掉错误,就不显示了

// 2.路由重复点击栈溢出

// 在beforEach方法里,判断重复路由,就next(false)

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import HelloWorld1 from '@/components/HelloWorld1'
import EchartsAll from '@/components/EchartsAll'

Vue.use(Router)

const router = new Router({
  mode: 'history',
  routes: [
    {
      path: '/hh/:id',
      // name: 'HelloWorld',
      component: HelloWorld,
      props: true
    },
    {
      path: '/ww',
      name: 'HelloWorld1',
      component: HelloWorld1
    },
    {
      path: '/map',
      name: 'EchartsAll',
      component: EchartsAll
    }
  ]
})

// 总的来说两个问题
// 1.路由重复点击报红错误
// 解决方法:重写push方法,cathc掉错误,就不显示了
// 2.路由重复点击栈溢出
// 在beforEach方法里,判断重复路由,就next(false)
const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {
  console.log(145454545)
  return originalPush.call(this, location)
    // 其实这里没解决掉重复问题,只是trycatch掉了....
    // 去掉catch一样报错
    .catch(err => err)
}
// app.vue里注意,router-link不会触发重复问题
// this.$router.push才能触发
// 之后push方法执行之后,才会接着执行beforeEach方法.....
// 看打印就知道,重复进一个路由的时候
router.beforeEach((to, from, next) => {
  console.log(2454545)
  console.log(to, from)
  // 解决路由栈溢出问题
  // next('/asdfdsa') 不同于next()
  // 这种传参的写法,每次都会触发路由拦截,所以如果不排除
  // 重复的,就会一直栈溢出
  // 所以这里要排除一下重复的
  if (to.path === from.path) {
    next(false)
  } else {
    next()
  }
})
router.onError((error) => {
  console.log('有错误,', error)
})
export default router

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值