Наследование угловых компонентов. Как можно выполнить хуки жизненного цикла родителя? - PullRequest
2 голосов
/ 19 июня 2019

Итак, у меня есть BaseComponent , и многие дочерние элементы его расширяют:

export class Child1Component extends BaseComponent implements OnInit, AfterViewInit

Child1Component не вызывает super.ngAfterViewInit(), но дляпочему-то BaseComponent AfterViewInit выполняется.Я просто утешаю его лог:

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

Как это возможно?Что еще, кроме super.ngAfterViewInit(), может вызывать хук жизненного цикла родителя?

Может ли это происходить только в режиме разработки?

Ответы [ 3 ]

3 голосов
/ 19 июня 2019

Я думаю, что это нормальное поведение наследования ООП.Если вы не определите в явном виде ngAfterViewInit на дочернем компоненте, то для этого компонента будет доступна родительская реализация этого метода.

Таким образом, во время жизненного цикла компонентов, когда угловые проверки показывают, ngAfterViewInitметод доступен на дочернем компоненте, тогда ответ - да: на дочернем компоненте реализован этот метод, но он унаследован от родительского компонента

1 голос
/ 19 июня 2019

Из Документов :

ngAfterViewInit()

Ответ после Angular инициализирует представления компонентаи дочерние представления / представление, в котором находится директива.

Вызывается один раз после первого ngAfterContentChecked ().

Как вы можете видеть, это нормальное поведение в случае ngAfterViewInit()

0 голосов
/ 19 июня 2019

дочерний компонент будет иметь (свойственный) все свойства и метод класса базового компонента , поэтому обычно дочерний класс будет иметь метод ngAfterViewInit, и он будет выполняться по углу, если вы хотите перезаписать этот методпросто воссоздайте это в дочернем классе, и он будет представлен в методе базового класса, но даже вы можете получить доступ к базовому классу, используя ключевое слово 100 super

export class Child1Component extends BaseComponent implements OnInit, AfterViewInit {

  ngAfterViewInit() {
    super.ngAfterViewInit(); // ? call base ngAfterViewInit method  
    console.log('Child1Component AfterViewInit');
  }

}

ngAfterViewInit - это специальный метод, который один из жизненных циклов перехватывает метод, который запускается и управляется под углом, подробнее об этом ? здесь

...