关于组件之间传值问题(vuex和事件总线)

问题背景:

我的项目需求只有一个页面,但是页面中存在着两个不同的组件需调用同一接口的需求。为了节省性能,我首先考虑的是使用vueX来将请求的数据存储下来调用,但是数据量小的时候,页面显示的数据正常,但当我请求的数据量很大的时候,一个组件加载的数据是之前的旧数据,并不是新请求出来的数据。所以我换成了事件总线的方式请求。

vuex的方式:

1、在store文件下的 index.js文件中写入存储数据的方法:

2、在其中一个组件中使用dispatch方法请求数据

 mounted() {
        this.$store.dispatch('getCompanyData',this.townName).then(()=>{
       this.getCompanyList()
     })
  },

3、在另一个组件中拿取数据

 mounted() {

    setTimeout(() => {
      this.getCompanyList()
    },500)

  },
  computed: {
    getData() {
      return this.$store.state.companySending
    }
  },
  methods: {
     getCompanyList() {
       let val = this.getData
       if (val.length >0){
         val.forEach(item => {
           this.option.data.push([
             item.expressCompany,
             item.totalCount
           ])
         })
       }
    },

上面的方式就是使用vuex方式存储数据,但是由于技术太low,没实现想要的效果,换成了下面的事件总线



事件总线:

1、在其中一个组件中请求数据,通过$emit()方法发送数据

2、在需要数据的组件中使用$on()方法监听获取数据

 created() {
    this.$bus.$on('sendCompany', msg => {
      if (msg) {
        msg.forEach(item => {
          this.option.data.push([
            item.expressCompany,
            item.totalCount
          ]);
        })

        this.option = {...this.option}
      }
    })
  },
  beforeDestroy() {
    this.$bus.$off('sendCompany')
  }

注意的是,还需要使用$off()方法,防止内存泄漏

至此,完成想要的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值