最近拖拉机因为工作上的原因,需要自己写一个vue的项目,所以经常会碰到一些问题,其中有一些问题是我觉得比较好玩的----vue-router重复跳转报错问题;
话不多说上代码!!!!
这是一段vue路由跳转的代码,相信大家都不陌生,这个代码会让我们的项目跳转到路由信息对象name为Intro的页面内,并且通过query传参的方式,携带一个userId;
也就是介个样子
但是如果当前页面不是name为Intro的页面的话,不会出现问题,但是如果我们的业务有需求,需要我们在Intro页面依旧跳转到Intro页面并且携带参数相同,例如搜索框跳转,就会出现如下错误;
报错的大概意思就是:未捕获到Promises导航重复,避免出现多余的重复导航,通俗的意思就是,vue-router认为我们刚刚的操作,是冗余的,所以出现报错的情况;
这件事情的出现还要追溯到vue-router v3.1.0版本的改动了,现阶段vue-router的版本已经更新至v3.5.3,现在跳转到v3.1.0版本内容部分;
红色框圈住的内容部分,大意是在push方法和replace方法调用的时候会返回一个promise实例,你可能会在console看到一个未捕获的错误,注意兄弟们,罪魁祸首找到了,它的意思就是,你调用的push和replace方法是有返回值的,并且还是一个promise实例,所以你在重复跳转同一个页面的时候会报错,下面我们尝试一下,看一下是不是真的是这样;
打印出来之后不出所料是一个Promise实例,所以我们可以通过catch捕获来处理错误;
这样错误就被处理掉了,接下来看另一种方式处理;
router.push(location, onComplete?, onAbort?)这个是vue-router官方文档对push方法的定义,前面的要跳转的路由信息,后面两个参数,分别是成功和失败的回调,所以话不多说继续上代码!!!
我添加成功和回调两个函数,错误也随之被处理掉,但是小伙伴们又会说,那这样处理会不会太麻烦,每次都要加参数或者catch捕获,技术大牛们早就想到了!!!
我们可以通过点击v3.1.0的介绍的read this部分,来查看处理的方式;
我们可以重写push方法来进行统一处理,replace方法的处理方式相同哦!!
ps:第一篇个人文章,如有不足小伙伴们随时指出哈