vue2/3切换路由没有切换组件,如何页面初始化刷新前端页面

在Vue 2/3中,如果您遇到了切换路由后组件没有刷新的情况,通常是因为Vue的组件复用机制导致的。组件复用意味着当您导航回相同的路由时,Vue会保留之前的组件实例而不是销毁并重新创建它,因此组件的生命周期钩子不会再次执行,导致数据看起来没有更新。

为了解决这个问题,您可以尝试以下几种方法:

方法1:使用<router-view>key属性(全局配置,简单方便,推荐)
方法2:使用watchbeforeRouteUpdate钩子(可,但是只能对单个组件)
方法3:手动刷新数据
方法4:提供和注射(Provide and Inject)

 具体实施方案

方法1:使用<router-view>key属性

<router-view>添加一个基于路由的key属性可以强制Vue每次路由变化时都创建一个新的组件实例。例如:

<router-view :key="$route.fullPath"></router-view>

这样设置后,即使是相同的路由,也会因为key的变化而重新渲染组件。

注:放在App.vue文件里会整个页面刷新,也包括目录文件,需要局部刷新,可放在对应组件

方法2:使用watchbeforeRouteUpdate钩子 

您可以在组件中使用watch选项来监视路由的变化,或者使用beforeRouteUpdate导航守卫来在路由更新前执行相应的操作。这些方法可以帮助您在路由参数变化时更新组件的数据和显示

watch: {
  '$route' (to, from) {
    // 对路由变化作出响应...
  }
},
// 或者
beforeRouteUpdate(to, from, next) {
  // 在这里处理路由更新逻辑
  next();
}

 方法3:手动刷新数据

在组件中,您可以通过监听beforeDestroy生命周期钩子来手动刷新数据。当组件即将被销毁时,触发数据的重载或刷新逻辑。

export default {
  beforeDestroy() {
    this.refreshData();
  },
  methods: {
    refreshData() {
      // 您的刷新逻辑
    }
  }
}

方法4:提供和注射(Provide and Inject)

在根组件中使用provideinject来控制路由的刷新。通过一个标志位来决定是否应该销毁并重新建立路由视图,从而实现页面的刷新。

// App.vue
data() {
  return {
    routerAlive: true
  };
},
provide() {
  return {
    routerRefresh: this.routerRefresh
  };
},
methods: {
  routerRefresh() {
    this.routerAlive = false;
    this.$nextTick(() => {
      this.routerAlive = true;
    });
  }
}
// 在子组件中
this.$inject('routerRefresh')();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值