父 - 使用 ViewChild 進行子互動

Viewchild 提供從父母到孩子的單向互動。使用 ViewChild 時,沒有來自子項的反饋或輸出。

我們有一個顯示一些資訊的 DataListComponent。DataListComponent 具有 PagerComponent 作為它的子級。當使用者在 DataListComponent 上進行搜尋時,它從服務獲取資料並要求 PagerComponent 根據新的頁面數重新整理分頁佈局。

import { Component, NgModule, ViewChild } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DataListService } from './dataList.service';
import { PagerComponent } from './pager.component';

@Component({
    selector: 'datalist',
    template: `<input type='text' [(ngModel)]="searchText" />
               <button (click)="getData()">Search</button>
        <table>
        <tr *ngFor="let person of personsData">
            <td>{{person.name}}</td>
            <td>{{person.surname}}</td>
        </tr> 
        </table>

        <pager></pager>
    `
})
export class DataListComponent {
    private personsData = null;
    private searchText: string;

    @ViewChild(PagerComponent)
    private pagerComponent: PagerComponent;

    constructor(private dataListService: DataListService) {}
    
    getData(){
        var response = this.dataListService.getData(this.searchText);
        this.personsData = response.data;
        this.pagerComponent.setPaging(this.personsData / 10); //Show 10 records per page
    }
}

@NgModule({
    imports: [CommonModule],
    exports: [],
    declarations: [DataListComponent, PagerComponent],
    providers: [DataListService],
})
export class DataListModule { }

通過這種方式,你可以呼叫在子元件中定義的函式。

在呈現父元件之前,子元件不可用。在父母生活之前嘗試接觸孩子將導致異常。