What is the difference between ngAfterContentInit and ngAfterViewInit?

Dariusz Filipiak picture Dariusz Filipiak · Jun 22, 2016 · Viewed 27.2k times · Source

What is the difference between functions ngAfterContentInit and ngAfterViewInit ?

Answer

Günter Zöchbauer picture Günter Zöchbauer · Jun 22, 2016

Content is what is passed as children usually to be projected at some <ng-content> element of a component.
View is the template of the current component.

The view is initialized after the content and ngAfterViewInit() is therefore called after 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>

If you run this code, the output for ngAfterViewInit - content should be null.

More details about lifecycle hooks see https://angular.io/guide/lifecycle-hooks