vue刷新当前页面--provide / inject 用法

4 篇文章 1 订阅
这篇博客探讨了在Vue应用中如何利用provide/inject替代window.reload()和router.go(0)来刷新页面,以解决浏览器重新加载导致的闪烁问题。作者在App.vue组件中使用provide提供reload方法,并在子组件中通过inject注入,从而实现平滑刷新。在reBack方法中调用reload方法,避免了闪烁,提高了用户体验。
摘要由CSDN通过智能技术生成

window.reload()/router.go(0):
采用window.reload(),或者router.go(0)刷新时,整个浏览器重新加载,闪烁。严重影响体验
provide / inject:
允许一个祖先组件向其所有子孙注入一个依赖,关系建立时间里始终生效

App.vue

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

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

声明reload,控制router-view的隐藏显示

index.vue
页面用inject注入reload方法

name: 'Deal',
  components: { pagination, crudOperation, rrOperation, udOperation, billWayForm, sfbillWayForm, approval, approvalInfo },
  mixins: [presenter(defaultCrud), header(), form(defaultForm), crud()],
  //重点看这里
  inject: ['reload'],
  //重点看这里
  data() {
  }
reBack(finBillNo) {
      this.$confirm('此操作将执行撤回, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消'
      }).then(() => {
        toReback(finBillNo).then(res => {
          // console.log(res)
          this.$message({
            type: 'success',
            message: '撤回成功!'
          })
          //
          //像这样直接reload引用即可
          //
          this.reload()
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消撤回'
        })
      })
    },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值