What's the difference between ngOnInit and ngAfterViewInit of Angular2?

前端 未结 3 596
失恋的感觉
失恋的感觉 2021-01-30 09:55

I can not understand what the difference between ngOnInit and ngAfterViewInit.

I found the only difference between them is @ViewChild

相关标签:
3条回答
  • 2021-01-30 10:33

    ngOnInit() is called right after the directive's data-bound properties have been checked for the first time, and before any of its children have been checked. It is invoked only once when the directive is instantiated.

    ngAfterViewInit() is called after a component's view, and its children's views, are created. Its a lifecycle hook that is called after a component's view has been fully initialized.

    0 讨论(0)
  • 2021-01-30 10:40

    Content is what is passed as children. View is the template of the current component.

    The view is initialized before the content and ngAfterViewInit() is therefore called before ngAfterContentInit().

    ** ngAfterViewInit() is called when the bindings of the children directives (or components) have been checked for the first time. Hence its perfect for accessing and manipulating DOM with Angular 2 components. As @Günter Zöchbauer mentioned before is correct @ViewChild() hence runs fine inside it.

    Example:

    @Component({
        selector: 'widget-three',
        template: `<input #input1 type="text">`
    })
    export class WidgetThree{
        @ViewChild('input1') input1;
    
        constructor(private renderer:Renderer){}
    
        ngAfterViewInit(){
            this.renderer.invokeElementMethod(
                this.input1.nativeElement,
                'focus',
                []
            )
        }
    }
    
    0 讨论(0)
  • 2021-01-30 10:41

    ngOnInit() is called after ngOnChanges() was called the first time. ngOnChanges() is called every time inputs are updated by change detection.

    ngAfterViewInit() is called after the view is initially rendered. This is why @ViewChild() depends on it. You can't access view members before they are rendered.

    0 讨论(0)
提交回复
热议问题