0x0 使用

使用 Provide/Inject 在子组件注入一个方法,这个方法可以控制 router-view 的显示和隐藏,从而达到页面加载的效果。

首先在顶级组件里添加方法:

<template>
  <div id="app">
    <router-view v-if="isRouterAlive" :key="key"/>
  </div>
</template>
 
<script>
export default {
  name: 'App',
  provide() {
    return {
      reload: this.reload
    };
  },
  data() {
    return {
      isRouterAlive: true
    };
  },
  computed: {
    key() {
      return this.$route.path;
    }
  },
  methods: {
    reload() {
      this.isRouterAlive = false;
      this.$nextTick(() => {
        this.isRouterAlive = true;
      });
    }
  }
};
</script>

然后只需要在子组件注入这个方法可以实现:

<template>
  <div class="app-container"/>
</template>
 
<script>
export default {
  inject: ['reload'],
  methods: {
    reloadFunction() {
      this.reload();
    }
  }
};
</script>

同样可以利用该特性实现别的方法。