Angular中Mixin混入类func属性注册异常:B方法未生效求助
Angular Mixin中仅A方法注册成功的原因及修复方案
问题原因
你当前的实现里,mixinA和mixinB都重写了ngOnInit方法,但因为混入顺序是mixinA(mixinB(Base)),mixinA返回的类直接继承自mixinB返回的类,后混入的mixinA的ngOnInit会完全覆盖掉mixinB的ngOnInit,导致mixinB里注册B方法的逻辑根本没机会执行,自然func里只有A方法生效。
修复方案
每个混入类的ngOnInit都需要先调用父类的ngOnInit,确保所有混入的钩子逻辑都能依次执行,而不是被覆盖。
修正后的混入类代码:
export function mixinA(Base) { return class extends Base { a(): void { // ... 你的A方法逻辑 } ngOnInit() { // 先调用父类的ngOnInit,保证mixinB的逻辑先执行 super.ngOnInit(); this.func = {...this.func, A: this.a}; } } } export function mixinB(Base) { return class extends Base { b(): void { // ... 你的B方法逻辑 } ngOnInit() { // 调用基类的ngOnInit(如果基类有实现的话) super.ngOnInit(); this.func = {...this.func, B: this.b}; } } }
额外说明
如果后续你的基类本身需要添加ngOnInit逻辑,也要保证逻辑正常执行。修改后,组件初始化时会按「基类→mixinB→mixinA」的顺序执行ngOnInit,两个方法都会被正确注册到func对象中,init()调用时就能正常执行A和B方法了。
内容的提问来源于stack exchange,提问作者KaptainIglo
相关产品推荐
相关产品推荐

