角组件继承。父母的生命周期挂钩如何执行?

时间:2019-06-19 12:55:05

标签: angular typescript prototypal-inheritance

所以我有 BaseComponent ,许多孩子对其进行了扩展:

export class Child1Component extends BaseComponent implements OnInit, AfterViewInit

Child1Component 不会调用super.ngAfterViewInit(),但是由于某种原因执行了BaseComponent AfterViewInit。我只是控制台它的日志:

ngAfterViewInit() {
  console.log('BaseComponent AfterViewInit')
}

那怎么可能?除了super.ngAfterViewInit()以外,还有什么可以称为父母的生命周期挂钩?

这只能在开发模式下发生吗?

3 个答案:

答案 0 :(得分:3)

我认为这是正常的OOP继承行为。如果您未在子组件上明确定义ngAfterViewInit,则此组件将具有该方法的父实现。

因此,在组件生命周期中,如果在子组件上可以使用ngAfterViewInit方法进行角度检查,则答案是肯定的:子组件已实现该方法,但它是从父组件继承的

答案 1 :(得分:1)

来自Docs

  

ngAfterViewInit()

     

在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