Vue父组件统一管理多个子组件loading的思路

405 阅读1分钟

有时候业务上子组件没有loading, 由父组件统一管理一个loading, 只要子组件触发异步接口, 就需要通知父组件loading.

思路

父组件会持有一个loadingNum属性, 记录正在loading的子组件的数量

data() {
  return {
    loadingNum: 0
  }
},

真正的loading则作为计算属性, loadingNum为0返回false, 否则返回true

  computed: {
    loading() {
      return this.loadingNum
    }
  },

父组件还会提供一个方法changeLoading给子组件, 子组件只需要调用这个方法就可以了, 不用关心父组件做了什么操作

  changeLoading(value) {
    if (value) return this.loadingNum++

    this.loadingNum <= 0 ? this.loadingNum = 0 : this.loadingNum--
  }

子组件使用

async getData() {
  this.changeLoading(true)
  ...
  this.changeLoading(false)
}