В чем разница между ngAfterContentInit и ngAfterViewInit?

в чем разница между функциями ngAfterContentInit и ngAfterViewInit ?

2 ответов


содержание-это то, что передается как дети, которые обычно проецируются на некоторых <ng-content> элемент компонента.
View-шаблон текущего компонента.

представление инициализируется после содержимого и ngAfterViewInit() поэтому называется после ngAfterContentInit().

@Component({
  selector: 'parent-cmp',
  template: '<div #wrapper><ng-content></ng-content></div>'
})
class ParentComponent {
  @ViewChild('wrapper') wrapper:ElementRef;
  @ContentChild('myContent') content:ElementRef;

  ngAfterViewInit() {
    console.log('ngAfterViewInit - wrapper', this.wrapper);
    console.log('ngAfterViewInit - content', this.content);
  }

  ngAfterContentInit() {
    console.log('ngAfterContentInit - wrapper', this.wrapper);
    console.log('ngAfterContentInit - content', this.content);
  }
}
<parent-cmp><div #myContent>foo</div></parent-cmp>

если вы запустите этот код, выход для ngAfterViewInit - content должно быть null.

подробнее о крючках жизненного цикла см. https://angular.io/guide/lifecycle-hooks


На следующем рисунке показан порядок крючки. источник: Угловые Крючки Жизненного Цикла

Angular 2 life cycle hooks

ngAfterContentInit : это вызывается после инициализации внешнего содержимого компонентов.

ngAfterViewInit : это вызывается после инициализации представления компонента и его дочерних представлений.