问题
What is the difference between functions ngAfterContentInit and ngAfterViewInit ?
回答1:
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
回答2:
The following picture shows the order of the hooks. source: Angular Lifecycle Hooks
ngAfterContentInit : This is called after components external content has been initialized.
ngAfterViewInit : This is called after the component view and its child views has been initialized.
来源:https://stackoverflow.com/questions/37962821/what-is-the-difference-between-ngaftercontentinit-and-ngafterviewinit