vue刷新当前页面 reload【provide/inject】

vue刷新当前页面有挺多种方法,比如 window.location.reload() 或者 this.$router.go(0)

但是这两种方法是会出现一瞬间的白屏,体验不好,所以这里给大家推荐第三种比较好用的刷新页面的方法


完整例子

主要是利用provide/inject 的应用
home.vue 定义

  1. <template>
  2. <div>
  3. <!-- 导航 -->
  4. <Nav/>
  5. <router-view v-if="isRouterAlive"/> // 2、通过isRouterAlive刷新路由
  6. </div>
  7. </template>
  8. <script>
  9. import Nav from './module/Nav.vue';
  10. export default {
  11. components:{
  12. Nav, // 侧边栏
  13. },
  14. data(){
  15. return {
  16. isRouterAlive: true // 1、这个属性名可以自己定义,默认值为true
  17. }
  18. },
  19. // 4、父组件提供reload方法
  20. provide () {
  21. return {
  22. reload: this.reload
  23. }
  24. },
  25. methods:{
  26. // 3、刷新的方法
  27. reload () {
  28. this.isRouterAlive = false
  29. this.$nextTick(function() {
  30. this.isRouterAlive = true
  31. })
  32. },
  33. }
  34. }
  35. </script>

Nav.vue 调用

  1. <template>
  2. <div>
  3. <p v-for="item in menuList" @click="getRoute(item)">{{item.meta.name}}</p>
  4. </div>
  5. </template>
  6. <script>
  7. export default{
  8. // 1、子组件获取home.vue定义的reload方法
  9. inject: ['reload'],
  10. data(){
  11. return {
  12. menuList: [{
  13. path: '/',
  14. name: 'Home',
  15. meta:{name: '首页'}
  16. },{
  17. path: '/list'
  18. name: 'List',
  19. meta:{name: '列表'}
  20. },{
  21. path: '/info'
  22. name: 'Info',
  23. meta:{name: '介绍'}
  24. }]
  25. }
  26. }
  27. methods: {
  28. getRoute(item){
  29. if(item.name == 'List')
  30. this.reload(); // 2、调用home.vue定义的方法
  31. }else{
  32. this.$router.push(item.name);
  33. }
  34. }
  35. }
  36. }
  37. </script>

参考文献

vue刷新当前页面