app HTML
1 2 3 | <app-nextchild #child1></app-nextchild> <app-nextchild #child2></app-nextchild> <button (click)="child2.helloGreeting('Smith')">调用子组件方法</button> |
app TS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import {AfterViewChecked, AfterViewInit, Component, OnInit, ViewChild} from '@angular/core'; import {NextchildComponent} from './nextchild/nextchild.component'; // @ts-ignore @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit, AfterViewInit, AfterViewChecked{ greeting = 'Hello'; user: {name: string} = {name: 'Jenny'}; @ViewChild('child1') child1: NextchildComponent; constructor() { } // tslint:disable-next-line:use-lifecycle-interface ngOnInit(): void { setInterval(() => { this.child1.helloGreeting('小青'); }, 5000); } ngAfterViewChecked(): void { console.log('父组件的视图变更检测完成'); } ngAfterViewInit(): void { console.log('父组件装配完成'); } } |
3.nextChild HTML
1 | <p>nextchild works!</p> |
4.nextchild TS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import {AfterViewChecked, AfterViewInit, Component, OnInit} from '@angular/core'; @Component({ selector: 'app-nextchild', templateUrl: './nextchild.component.html', styleUrls: ['./nextchild.component.css'] }) export class NextchildComponent implements OnInit, AfterViewInit, AfterViewChecked { constructor() { } ngAfterViewChecked(): void { console.log('子组件的视图变更检测完成'); } ngAfterViewInit(): void { console.log('子组件装配完成'); } ngOnInit(): void { } public helloGreeting(name: string): void{ console.log('Hello ' + name); } } |