父 - 使用 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 { }

通过这种方式,你可以调用在子组件中定义的函数。

在呈现父组件之前,子组件不可用。在父母生活之前尝试接触孩子将导致异常。