Maison > interface Web > js tutoriel > le corps du texte

Une brève discussion sur 5 méthodes de communication entre les composants angulaires

青灯夜游
Libérer: 2021-08-16 10:04:04
avant
2639 Les gens l'ont consulté

Comment communiquer entre composants angulaires ? L'article suivant vous présentera les 5 méthodes de communication entre les composants Angular Si nécessaire, vous pouvez vous y référer ~

Une brève discussion sur 5 méthodes de communication entre les composants angulaires

Les composants sont les unités de construction d'angular dans le projet, afin de garantir que les données. entre les composants peuvent être envoyés dans les deux sens. Angulaire encapsule certaines méthodes qui permettent la communication entre les composants. [Recommandations de didacticiel associées : "Tutoriel angulaire"]

1. Le composant parent transmet les données au composant enfant via la liaison d'entrée

Composant parent

parent.component.ts

age = 18;
name = '  xiaoming '
Copier après la connexion

parent.component . html

<app-child-1 [age]="age" [name]="name"></app-child-1>
Copier après la connexion

child component

child1.component.ts

@Input() age!: number;
Copier après la connexion

Interception des modifications dans les valeurs des attributs d'entrée

1 Utilisez un paramètre d'attribut d'entrée pour intercepter les modifications de la valeur du composant parent, et passer à l'action.

child1.component.ts

@Input()
set name(name: string) {
    this._name = name.trim();
}
private _name: string;
Copier après la connexion

2. Utilisez la fonction hook ngOnChanges() pour surveiller les changements dans les valeurs des attributs d'entrée et répondre. Cette méthode est plus appropriée que l’utilisation de paramètres de propriétés lorsque plusieurs propriétés d’entrée interactives doivent être surveillées.

child1.component.ts

ngOnChanges(changes: SimpleChanges): void {
    console.log(changes);
}
Copier après la connexion

Nous pouvons en apprendre davantage sur les propriétés associées de SimpleChange grâce au fichier de description de type officiellement fourni par angulaire :

Une brève discussion sur 5 méthodes de communication entre les composants angulaires

Une brève discussion sur 5 méthodes de communication entre les composants angulaires

2. Le composant parent écoute l'événement de l'enfant composant et obtient le composant enfant et le transmet à la valeur du composant parent

Le composant enfant expose une propriété EventEmitter (avec le décorateur @Output) Lorsque l'événement se produit, le composant enfant utilise cette propriété pour émettre la valeur au composant enfant. composant parent. Le composant parent se lie à cette propriété d'événement et répond lorsque l'événement se produit.

Composant enfant

child1.component.ts

@Output() voted = new EventEmitter<boolean>();
emitValue(): void {
    this.voted.emit(true);
}
Copier après la connexion

child1.component.html

<button (click)="emitValue()">Click</button>
Copier après la connexion

Composant parent

parent.component.html

<app-child-1 [age]="age" [name]="name" (voted)="getChildParam($event)"></app-child-1>
Copier après la connexion

parent.component.ts

getChildParam(value: boolean): void {
    console.log(value); // true
}
Copier après la connexion

Trois, père Le composant lit les propriétés du composant enfant et appelle la méthode du composant enfant dans le modèle via des variables locales (#varibleName)

composant enfant

child1.component.ts

address = &#39;Shanghai&#39;;
setAddress(address: string): void {
    this.address = address;
}
Copier après la connexion

composant parent

parent.component.html

<app-child-1 [age]="age" [name]="name" (voted)="getChildParam($event)" #child1Component></app-child-1>
<div>{{child1Component.address}}</div>
<button (click)="child1Component.setAddress(&#39;Beijing&#39;)">Click</button>
Copier après la connexion

Limitations : Les connexions composant parent-composant enfant doivent toutes être établies dans le modèle du composant parent. Si la classe du composant parent doit lire la valeur de propriété du composant enfant ou appeler la méthode du composant enfant, elle ne peut pas utiliser la méthode de variable locale.

4. Le composant parent appelle @ViewChild

Lorsque la classe du composant parent doit lire la valeur de la propriété du composant enfant ou appeler la méthode du composant enfant, elle ne peut pas utiliser la méthode de variable locale si elle existe ; est un tel besoin, nous pouvons passer @ViewChild injecte le composant enfant dans le composant parent

Composant parent

parent.component.ts

@ViewChild(Child1Component) private child1Component!: Child1Component;
Copier après la connexion

Vous pouvez accéder aux propriétés et méthodes du composant enfant via la variable child1Component ; ;

5. Utiliser des services partagés pour implémenter n'importe quel composant Communication entre

Afin d'établir la communication entre tous les composants, nous pouvons combiner l'objet BehaviorSubject dans Rxjs pour créer un service partagé pour l'utilisation de BehaviorSubject ; ce blog blog.tcs-y.com/2019/10 /08/…

Créer dataService.ts

import {BehaviorSubject} from &#39;rxjs&#39;;
import { Injectable} from &#39;@angular/core&#39;;
@Injectable(
  {providedIn: &#39;root&#39;}
)
export class DataService {
  data: BehaviorSubject<number> = new BehaviorSubject<number>(0);
}
Copier après la connexion

Injecter le service dans le constructeur du composant 1 et définir data

child1.component.ts

constructor(private dataService: DataService) {}
    // 设置data的值
changeData(): void {
    this.dataService.data.next(10);
}
Copier après la connexion

child1.component.html

<button (click)="changeData()">Click</button>
Copier après la connexion

Dans le constructeur du composant 2 Injectez le service et abonnez-vous à data

child2.component.ts

constructor(private dataService: DataService) {
    this.dataService.data.subscribe(value => {
        console.log(value); // 10
    });
}
Copier après la connexion

Pour plus de connaissances sur la programmation, veuillez visiter : Introduction à la programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal