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

目录
  • this.$refs.tabs.refreshs()刷新组件
    • 第一种:当前组件刷新
    • 第二种:刷新父组件时
    • 第三种:非关系组件
    • vue组件重新加载(刷新)
  • 如何刷新当前组件

    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中的方法,从而实现了目标效果。

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

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

    本文转自网络,如有侵权请联系客服删除。