使用 provide / inject,实现页面刷新

在App.vue文件中:

增加 <router-view v-if="myFlag"></router-view>

data() {return {myFlag: true};},

provide() {return {reload: this.reload};},

methods: {reload() {this.myFlag= false;this.$nextTick(() => {this.myFlag= true;});}}
 

代码如下

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

<script>
  export default {
    
    data() {
      return {
        myFlag: true
      };
    },
    provide() {
      return {
        reload: this.reload
      };
    },
    methods: {
      reload() {
        this.myFlag= false;
        this.$nextTick(() => {
          this.myFlag= true;
        });
      }
    }
  }
</script>

 在需要刷新的页面里:增加注入inject: ['reload']

<script>
export default {
  inject: ['reload'],
}
</script>

在调用接口成功后的代码块里,调用reload函数。

updateOrder(params).then((resp) =>{
            if (resp.code === 0) {
              this.reload()
            } else {
              this.loading = false
              this.$message.warning(resp.msg)
            }
})

 参考文章:

https://www.cnblogs.com/heikedeblack/p/14338661.html

 代码解释

  provide() {
    return {
      reload: this.reload,
    }
  }

这段代码是一个Vue组件中的provide选项。provide选项允许组件提供这样一种机制:使一个对象可被子孙组件注入,而该对象不需要再像props一样逐层手动传递。

在这个例子中,provide提供了一个名为reload的对象,该对象指向了组件中的reload方法。这意味着任何子孙组件都可以通过inject选项注入reload对象并调用this.reload方法。

这个功能的主要作用是使得组件中的方法能够被更深层次的子组件所访问和调用,而无需通过多层的props传递或事件派发来实现。

总结一下,这段代码通过provide提供了一个全局可用的reload方法,使得任何子孙组件都可以直接通过this.reload调用当前组件中的reload方法。

    reload() {
      this.myFlag = false;
      this.$nextTick(() => {
        this.myFlag = true;
      });
    }

这个方法将myFlag属性设置为false,然后通过$nextTick方法异步将其设置回true这会导致<router-view>组件重新渲染

结合上述provide选项提供的reload方法和这里提供的reload方法,可以得出结论:reload方法用于重新渲染<router-view>组件,以达到刷新当前路由的效果

综上所述,这段代码的主要功能是提供了一个全局可用的reload方法,用于重新渲染路由视图组件,从而实现路由的刷新效果。

下面是一个示例,演示了$nextTick 的使用场景:

简言之:$nextTick里的函数是在DOM更新后执行

回调函数中的代码将会在 Vue 完成更新 DOM 后执行,确保了对更新后的 DOM 元素进行操作的时机。

// 在数据更新后立即操作 DOM 元素
this.$nextTick(() => {
  // DOM 更新后执行的操作
  // 例如,此处可以获取更新后的 DOM 元素并进行相应操作
});

$nextTick 方法主要用于在 Vue.js 更新 DOM 后执行延迟执行的代码。Vue 在修改数据后并不会立即更新 DOM,而是等待当前的同步渲染队列清空之后,再执行传入的回调函数或表达式。这对于需要等待 Vue 完成更新后执行一些操作的情况非常有用。

一般而言,当你需要在 Vue 更新 DOM 之后立即执行一些代码时,就可以使用 $nextTick 来确保代码在正确的时间执行。例如,在更新数据后立即查找并操作更新后的 DOM 元素。

总而言之,$nextTick 主要用于等待 Vue 完成对 DOM 的更新操作后执行代码,以确保操作在正确的时机进行。

https://v2.cn.vuejs.org/v2/api/#provide-inject

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐