场景:
父组件:
<div v-for="(item,index) in corpKideList" :id="item.names" :key="index" :ref="item.names">
<component :is="item.key"
:ref="item.key"
:type="item.key"
:apply-obj.sync="infoApplyInstance"
:apply-id.sync="localApplyId"
@create="showCreatedTimes"
/>
</div>
corpKideList 会有很多数量不定的组件. 这些组件有一些共性的查询,例如:获取字典,加载附件
为了减少子组件对共性的查询次数,使用EventBus来合并为一次查询
现在:
获取字典(DictBus),加载附件(AttaBus). 在子组件加载时告诉告诉父组件需要哪些字典项, 组件需要哪些附件. 父组件侦听到当前corpKideList的子组件都加载完开始请求: 字典和附件。获得查询数据后再通过相应的EventBus把结果推到子组件中
BUG:
在多标签页时出现一个问题, 后面新开的标签页(B公司)加载的附件会冲掉已经打开的标签页(A公司)的附件. 发现问题后在原来的事件名中补了一个(公司.id)参数以免冲洗发生. 倒也OK
问题?
由于组件过多,需要一个一个的找到并附加参数, 有什么办法能在EventBus(AttaBus)类上解决此类问题?
一般来说,需要严格执行顺序的场景可以用 EventBus,如果主要为展示数据,应该用 vuex、pinia 等状态管理工具。
对于题主的场景,很明显应该用 vuex/pinia。然后接下来,就可以很方便的利用 vue computed 来获取你要的数据,不需要怎么修改。