最近在处理一个bug时,意外接触到了provide和inject。事情是这样的,页面有一个弹层,弹层中定义若干步骤条,每个步骤条对应一个子组件。而步骤条本身也是一个组件。然而在第一个步骤中加载到数据后,需要根据数据再重新定义步骤条数量。所以需要在子组件中调用最外层组件的重置步骤条数据方法。在子组件内部触发方法,通过$refs的方式,调用两层parent是可以正常调用成功的,但是由于通过编辑按钮进入组件初始化。$refs会存在偶发性故障,子组件调用父组件时,还未渲染完成,导致无法实现效果。那么,就可以通过provide和inject来实现这个功能了,并且不会出现渲染问题。父组件注册这个方法,子组件进行调用。
父组件
export default {
name: 'QualityCheckPlanDialog',
directives: {
stopReClick
},
provide() {
return {
resetComponentArr: this.resetComponentArr
}
}
}子组件
export default {
name: 'PlanSet',
props: {
curSteps: {
type: Number,
default() {
return -1
}
}
},
inject: ['resetComponentArr']
}直接通过this.resetComponentArr即可使用

还没有评论,来说两句吧...