项目中遇到跳转详情,但是详情中侧边有小列表的存在,这样就是相当于从详情跳到详情,如果直接使用this. r o u t e r . p u s h 的方式,则会发现页面不会重新渲染,写在 c r e a t e d 和 m o u n t e d 内的方法并不会执行,解决这个问题的方式如下:路由监听一、 w a t c h :在方法里面还是使用 t h i s . router.push的方式,则会发现页面不会重新渲染,写在created和mounted内的方法并不会执行,解决这个问题的方式如下: 路由监听 一、watch: 在方法里面还是使用this. router.push的方式,则会发现页面不会重新渲染,写在createdmounted内的方法并不会执行,解决这个问题的方式如下:路由监听一、watch:在方法里面还是使用this.router.push进行跳转,但是添加路由监听:

watch: {
    // 利用watch方法检测路由变化:
    $route: function(to, from) {
        if (to.fullPath !== from.fullPath) {
            this.currentPage = this.$route.query.code;//获取参数
        }
    }
}

到这里基本上可以使页面数据进行重新渲染了,但是连续点击同一条两次的话,则会报下面的错误:
Uncaught (in promise) Error: Avoided redundant navigation to current location:“《当前页面的地址》”
为了解决这个问题,可以在路由文件内添加如下代码:

//获取原型对象上的push函数
const originalPush = Router.prototype.push
//修改原型对象中的push方法
Router.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

二、beforeRouteUpdate
其实和方法一是一样的,也是监听路由,点击同样的路由报上面错误解决方式也是一样的。

beforeRouteUpdate (to, from, next) {
    next();
    if (to.fullPath !== from.fullPath) {
        this.currentPage = this.$route.query.code;
    }
},

即可实现跳转携带不同参数跳转相同路由的需求。

Logo

前往低代码交流专区

更多推荐