所以我有 BaseComponent ,许多孩子对其进行了扩展:
export class Child1Component extends BaseComponent implements OnInit, AfterViewInit
Child1Component 不会调用super.ngAfterViewInit()
,但是由于某种原因执行了BaseComponent AfterViewInit。我只是控制台它的日志:
ngAfterViewInit() {
console.log('BaseComponent AfterViewInit')
}
那怎么可能?除了super.ngAfterViewInit()
以外,还有什么可以称为父母的生命周期挂钩?
这只能在开发模式下发生吗?
答案 0 :(得分:3)
我认为这是正常的OOP继承行为。如果您未在子组件上明确定义ngAfterViewInit
,则此组件将具有该方法的父实现。
因此,在组件生命周期中,如果在子组件上可以使用ngAfterViewInit
方法进行角度检查,则答案是肯定的:子组件已实现该方法,但它是从父组件继承的>
答案 1 :(得分:1)
来自Docs:
在Angular初始化组件的视图和子级后响应 视图/指令所在的视图。
在第一个ngAfterContentChecked()之后调用一次。
如您所见,在ngAfterViewInit()
情况下它是正常行为
答案 2 :(得分:0)
子组件将具有(固有的)所有基本组件类的属性和方法,因此,通常情况下,子类将具有ngAfterViewInit
方法,并且如果需要,该方法将由angular运行。覆盖此方法会在子类上简单地重新创建此方法,它将覆盖基类中的方法,但是即使您可以使用? super 关键字
export class Child1Component extends BaseComponent implements OnInit, AfterViewInit {
ngAfterViewInit() {
super.ngAfterViewInit(); // ? call base ngAfterViewInit method
console.log('Child1Component AfterViewInit');
}
}
ngAfterViewInit是一种特殊的方法,它是生命周期中的一种钩子方法 按角度运行和管理,详细了解?here