Vue实现刷新当前页面,重载页面数据

前言

前几天在做个人播放器项目时,遇到一个问题:在进行搜索功能时,第一次搜索后,在搜素界面再次搜索时,发现搜索完成只是hash地址发生的转换,但是页面的数据并没有发生转换,也就是没能触发组件的刷新,由于搜索框的组件和搜索内容的组件二者之间不是父子组件也不是兄弟组件,很难实现数据交互。在苦恼许久查阅文档和百度搜索后,成功解决,给出以下解决方案给予参考。

该方案的应用场景可用于一些需要刷新页面,重载数据时,比如:在管理后台,在执行完,增,删,改,操作的时候等等。

解决方案

需要用到一个 provide / inject 这对用例。这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效

代码实现

在根组件中,也就是App.vue中写如下代码:

<template>
  <div id="app">
        <router-view v-if="isRouterAlive"></router-view>
        <index v-if="isRouterAlive"/>
      /*只要在想要刷新的组件中加上v-if="isRouterAlive"即可*/
  </div>
</template>
 
<script>
export default {
  name: 'App',
  provide (){
     return {
       reload:this.reload
     }
  },
  data(){
    return {
       isRouterAlive:true
    }
  },
  methods:{
    reload (){
       this.isRouterAlive = false
       this.$nextTick(function(){
          this.isRouterAlive = true
       })
    }
  },
  components:{
  }
}
</script>

在触发的子组件中引用即可

export default{
    inject:['reload'],
    data(){
        return{
            inputValue:''
     }
    },
    method:{
        toResult(){
        this.reload()
        }
    }
}

Tip: 只需要在子组件中引入inject:['reload'];然后调用reload()方法即可实现刷新;是不是很简单方便~~

在此分享给大家

作者:我小时候很可爱
链接:https://www.jianshu.com/p/86b9846ba25e/
来源:简书

posted @   820820820  阅读(1087)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示