您的当前位置:首页正文

vue关于this.$refs.tabs.refreshs()刷新组件方式

2024-11-11 来源:个人技术集锦

this.$refs.tabs.refreshs()刷新组件

当更改了用户信息后,需要刷新页面或者组件。

第一种:当前组件刷新

定义一个请求用户信息的方法,在需要时调用:

sessionStorage.setItem(‘userInfo‘,JSON.stringify(this.userInfo));
//从session缓存中获取

第二种:刷新父组件时

子组件某个需要的地方:   

this.$emit(‘refresh‘);  

父组件:

methods:{
     refresh() {
            this.userInfo = JSON.parse(sessionStorage.getItem(‘userInfo‘));
     }
},

第三种:非关系组件

父组件:

<template>
   <top-bar ref="tabs"/>   //需要刷新的组件(非关系组件)
</template>
methods:{
    refresh() {
        this.$refs.tabs.refreshs();  //刷新子组件 ,top-bar是vue组件实例的名字 ,tabs时引用的名字,refreshs是Vue自带的方法
    }
},

vue组件重新加载(刷新)

方法:利用v-if控制router-view,在根组件APP.vue中实现一个刷新方法

<template>
    <router-view v-if="isRouterAlive"/>     //路由的组件
</template>
<script>
export default {
 data () {
   return {
     isRouterAlive: true
   }
 },
 methods: {
   reload () {
     this.isRouterAlive = false
     this.$nextTick(() => (this.isRouterAlive = true))
   }   
 }
}
</script>

然后其它任何想刷新自己的路由页面,都可以这样:

this.reload()

如何刷新当前组件

公用内容动态改变了全局参数,要求切换后刷新当前组件所有请求,或重新加载当前组件。

因为我们在项目中加入了vue-routerapp.vue,就可以通过控制router-view去达到我们需求的效果。

同时也要用到 provide/inject,个人列表类似vuex的辅助函数,跨越层级关系引入(注入)你的某个方法。

app.Vue

<template>
  <div id="app" v-loading.fullscreen.lock="fullscreenLoading"  element-loading-spinner="rybloading" element-loading-text="正在请求数据" element-loading-background="rgba(0, 0, 0, 0.6)">
    <router-view v-if="isRouterAlive"></router-view>
  </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
        })
      }
    }
  }
</script>
<style lang="scss">
</style>

然后在你修改全局参数的组件中加入

data(){
	return{
		
	}
},
inject:['reload'], // 在这个组件中注入这个方法
//...事件中调用
methods:{
	changed(){
		this.reload() //调用
	}
}

我在项目中的具体表现

通过切换期次,修改全局的请求参数,结合了Vuex,在下拉菜单所在的组件中注入app.vue中的方法,从而实现了目标效果。

切换期次,重新加载当前组件所有数据。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

显示全文