Komponentisierung ist das Kernkonzept von Angular, daher wird Komponentenkommunikation häufiger verwendet und ist sehr wichtig.
Offizielles Portal:
https://angular.io/guide/component-interaction
https://angular.cn/guide/component-interaction
Empfohlene Tutorials: „angular Tutorial“
// Die Unterkomponente muss Input verwenden, um <!-- parentComponent -->
<app-child [name]="'childName'"></app-child>
<span>{{name}}</span>
【Output EventEmitter】Unterkomponente:
@Input() public name:string = '';
Übergeordnete Komponente:
@Output() public readonly childEmit: EventEmitter<T> = new EventEmitter<T>(); this.childEmit.emit(data);
Übergeordnete Komponente:
<app-child (childEmit)="getData($event)"></app-child>
public getData(data:T): void { }
[Beispiel]
<app-child **#child**></app-child> <button (click)="**child**.print('---')">点击</button>
Nicht-Eltern-Kind-Komponentenkommunikation
1. Der Service
Einzelfallmodus ist tatsächlich eine Variable, die in beide Richtungen ausgelöst werden muss ( Senden von Informationen/Empfangen von Informationen) sowie das Festlegen und Abrufen von Daten müssen von der Komponente selbst durchgeführt werden. service.ts
@ViewChild('child', { static: true }) public child!: ElementRef<HTMLElement>; public print():void{ if(this.child){ // 这里得到child,可以使用child中的所有的public属性方法 this.child.print('hello2'); } }
Komponente 1 übergibt Informationen an den DienstKomponente 2 erhält Informationen vom Dienst
// 父组件 import { Component } from '@angular/core'; @Component({ selector: 'app-parent', template: ` <app-child #child [name]="name" (childEmit)="childClick($event)"></app-child> <button (click)="child.print('hello1')">调用子组件的方法1</button> <button (click)="print()">调用子组件的方法2</button> ` }) export class ParentComponent { public name:string = '大儿子'; @ViewChild('child', { static: true }) public child!: ElementRef<HTMLElement>; public childClick(bool:Boolean):void{ // TODO } public print():void{ if(this.child){ this.child.print('hello2'); } } } /*****************************************************/ // 子组件 import { Component, Input, Output, EventEmitter } from '@angular/core'; @Component({ selector: 'app-child', template: ` <h3 (click)="myClick()">{{name}}</h3> ` }) export class HeroChildComponent { @Input() public name: string; @Output() public readonly childEmit: EventEmitter<boolean> = new EventEmitter<boolean>(); public myClick():void{ this.childEmit.emit(true); } public print(content:string):void{ console.log(content); } }Nach dem Login kopieren
import { Component, Injectable, EventEmitter } from '@angular/core'; @Injectable() export class myService { public info: string = ''; }
Das echte Veröffentlichungs- und Abonnementmodell, wenn sich die Daten ändern, Der Abonnent kann auch eine Antwort erhalten. Hier sind nur Beispiele für Verhalten. Betreff Abonnenten
NeinNein
Prompte Veröffentlichung. Neue Daten veröffentlichen, sobald sie verfügbar sind
BehaviorSubject
Ja. Die Speicherung des letzten Datenelements bzw. Anfangswertes
wird rechtzeitig freigegeben. Veröffentlichen, wenn neue Daten verfügbar sind
Zeitgerechte Freigabe. Neue Daten veröffentlichen, sobald sie verfügbar sind | AsyncSubject | Ja. Das letzte gespeicherte Datenelement | |
---|---|---|---|
Andere Kommunikationsmethoden | Routenwertübertragung, lokaler Browserspeicher (LocalStorage, SessionStorage), Cookies. | ||
! ! |
Das obige ist der detaillierte Inhalt vonEinführung in 5 Methoden der Komponentenkommunikation in Angular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!