vue通过router地址传参跳转同一路由页面,页面不刷新的解决办法

背景

vue、 vue-router@4

记录一下最近遇到的vue路由页面间的跳转的问题,其中就涉及到了不同路由的跳转(/a/b1 => /a/b2)、相同路由不同参数间的跳转(/a/b?c=1 => /a/b?c=2)、相同页面锚点跳转(/a/b#id1 =>/a/b#id2)

解决

原因:渲染的是同一组件
解决:可以在不刷新的页面通过监听route,重新加载数据

//写法一
<script setup>
import { useRoute } from "vue-router";
const route = useRoute();
watch(route, (to, from) => {
  //执行重新加载数据
})
</script>
//写法二
<script>
export default {
  watch: {
    $route: function (to, from) {
      
    },
  },
};
</script>

三种情况

1、不同路由的跳转(/a/b1 => /a/b2)

例子:

export default [
  {
    path: "/a/b1",
    name: "b1",
    component: () => import("@/pages/a/b.vue"),
  },
  {
    path: "/a/b2",
    name: "b2",
    component: () => import("@/pages/a/b.vue"),
  }
]

// b.vue
watch(route, (to, from) => {
  //执行重新加载数据
})

2、相同路由不同参数间的跳转(/a/b?c=1 => /a/b?c=2)

解决方案同上

3、相同页面锚点跳转(/a/b#id1 =>/a/b#id2)

可以手动实现

export const onToAnchor = (id) => {
  let timer = setTimeout(() => {
    //未获取到id,不执行
    if (!id) {
      clearTimeout(timer);
      timer = null;
      return;
    }
    let element = document.querySelector(id);
    if (element) {
      element.scrollIntoView({
        behavior: "smooth",
        block: "start",
        inline: "nearest",
      });
    }
  }, 0);
};
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值