z_mango 2021-03-18 12:31 采纳率: 66.7%
浏览 426
已采纳

this.$router.beforeEach为什么每执行一次就会叠加一次?

业务场景:A公告列表页,B公告详情页,

要求点击A公告标题进B公告详情页,从B详情页再返回A,要求列表页不更新

我的办法是this.$router.beforeEach获取路由,只要路由不是从B详情页返回的,A公告的列表页就会进行请求刷新

但是:不知道为什么我每次从A到B,再从B返回,反复操作,每点击一次,beforeEach就会叠加一次(如果是从其它页面进入A公告列表页也是会叠加,如果反复了5次,那么第5次进入列表页时,就会发送5次更新请求)

 created() {
    this.$router.beforeEach((to, from, next) => {
      console.log(from.name);
      //如果来自详情页就不发送请求
      if (from.name != "NoticeDetail" && from.name != "Notice") {
        this.$api
          .getNotice({ date: new Date(), limit: 10, isloadelater: true })
          .then((res) => {
            console.log("执行了created---AXIOS调用");
            this.skeletonLoading = false;
            this.initNoticeList(res.data.data.messages);
            this.endDate = this.NoticeList[this.NoticeList.length - 1].SubDate;
          })
          .catch((e) => {
            console.log(e);
          });
      }
      next();
    }),
}

我的问题是:

1、为什么会叠加,我怎么解决呢?

2、我想获得是哪个页面跳转过来的,用this.$router.beforeEach是否合理,有其它更优的方法吗?

3、详情页返回不刷新标题列表页,从其它页面进入标题列表页需要刷新,有其它更好的方案吗?

  • 写回答

4条回答 默认 最新

  • 射手座男人 2021-03-18 14:24
    关注

    beforeRouteEnter 结合 keep-alive 去实现

    // 你的router-view 文件中
    
    <keep-alive>
                <router-view :key="$route.path" v-if="this.$route.meta.keepAlive"></router-view>
              </keep-alive>
              <router-view :key="$route.path" v-if="!this.$route.meta.keepAlive"></router-view>
    // 列表页
    
    created() {},
    beforeRouteEnter(to,from,next) {
       if (to.path === '详情页' || from.path === '详情页') {
           to.meta.keepAlive = true
       } else {
         // 其他页进来的 不缓存
       }
    }

    具体的你在看看 差不多就是这个意思

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵