vue项目刷新页面(provide、inject方式)

开发vue项目时,框架需要一个刷新按钮,手动刷新页面渲染,我们知道window.reload(),或者router.go(0)可以路由刷新,重新进入当前页面,但是这种方法的问题在于会导致页面白屏,用户体验不是很好。

provide、inject方式

我们在需要刷新的路由层级,<router-view>渲染的地方用v-if去控制页面刷新。在这里用App.vue举例

<template>
  <div id="app">
    <router-view v-if="isRouterAlive"></router-view>
  </div>
</template>

<script>
export default {
  name: "App",
  // 父组件中通过provide来提供变量,在子组件中通过inject来注入变量。
  provide() {
    return {
      reload: this.reload,
    };
  },
  data() {
    return {
      // 控制视图是否显示的变量
      isRouterAlive: true,
    };
  },
  methods: {
    reload() {
      //先关闭,再打开
      this.isRouterAlive = false;
      this.$nextTick(function () {
        this.isRouterAlive = true;
      });
    },
  },
};
</script>

子组件<header-bar>接收reload方法,并在点击刷新的时候调用,这样就实现了整个页面的刷新效果

export default {
  name: "HeaderBar",
  inject: ["reload"],
  methods: {
    ...mapActions(["handleLogOut"]),
    handleCollpasedChange(state) {
      this.$emit("on-coll-change", state);
    },
    handleRefresh() {
      this.reload();
    },
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值