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

Comment communiquer entre les composants Angular parent et enfant ? Une brève analyse de la méthode de transmission des valeurs de père en fils

青灯夜游
Libérer: 2021-08-10 10:02:07
avant
1827 Les gens l'ont consulté

AngularComment communiquer entre les composants parent et enfant ? Cet article vous présentera la méthode de transfert de valeur des composants angulaires parent-enfant.

Comment communiquer entre les composants Angular parent et enfant ? Une brève analyse de la méthode de transmission des valeurs de père en fils

Transférer les valeurs via Input et Ouput

Composant parent : html et ts

<app-liftcycle [name]="name" (changeName)="changeName($event)"></app-liftcycle>
Copier après la connexion
public name: string = "jack";
public changeName(value: string) {
    this.name = value;
}
Copier après la connexion

Composant enfant : html et ts

<div (click)="emit()">{{name}}</div>
Copier après la connexion
import { Component, Input, EventEmitter, Output } from &#39;@angular/core&#39;;
@Input() name: string;
@Output() changeName: EventEmitter<string> = new EventEmitter<string>();
public emit() {
    this.changeName.emit("修改name属性");
}
Copier après la connexion

[Recommandation de tutoriel associée : "tutoriel angulaire"]

Via setter Écoute des changements dans les attributs

Le composant parent est le même que ci-dessus, le composant enfant :

private _name: string = "";
@Input() 
public get name(): string {
    return this._name;
}
public set name(value: string) {
    this._name = value + "定义结构";
}
Copier après la connexion

Surveillance des changements dans les attributs d'entrée via la fonction hook ngOnChanges

ngOnChanges est plus simple que la méthode setter lors de la surveillance de plusieurs attributs.

@Input() name: string;
ngOnChanges(changes: SimpleChanges): void {
    (({name}) => {
        console.log(name.currentValue,name.previousValue);
    })(changes);
}
Copier après la connexion

Appelez les méthodes et les propriétés du composant enfant via des variables de modèle dans le composant html du composant parent.

La variable de modèle obtient une référence au composant enfant. Composant parent :

<app-liftcycle #child></app-liftcycle>
<button (click)="child.childFn()">按钮</button>
Copier après la connexion

Composant enfant :

public childFn() {
    console.log("通过模板变量调用子组件中的方法");
}
Copier après la connexion

Le composant parent obtient l'instance du composant enfant via ViewChild

<app-liftcycle [name]="name" (changeName)="changeName($event)" #child></app-liftcycle>
<button (click)="childFn()">childFn</button>
Copier après la connexion
@ViewChild("child") child: LiftcycleComponent;
public childFn(): void {
    this.child.childFn();
}
Copier après la connexion

Communique via le service

service:

import { Subject } from &#39;rxjs&#39;;
import { Injectable } from &#39;@angular/core&#39;;

@Injectable({
    providedIn: &#39;root&#39;
})
export class CommunService {

    constructor() {}
    public commun = new Subject<string>();
    communSend() {
        this.commun.next("send");
    }
}
Copier après la connexion

Composant parent :

constructor(private commun: CommunService) { }
public send(): void {
    this.commun.communSend();
}
Copier après la connexion

Composant enfant :

constructor(private commun: CommunService) { 
    this.commun.commun.subscribe((value) => {console.log(value)});
}
Copier après la connexion

Méthode de transfert du composant parent

Le composant parent transmet la méthode au composant enfant via des attributs, et le composant enfant l'appelle. Il n'est généralement pas recommandé que React utilise cette méthode de communication. Il se peut que la liaison basée sur cela soit compliquée, donc angulaire n'est pas recommandé. L’émergence de React Hooks est aussi en partie due à C'est la complexité de la classe. Composant parent :

<app-liftcycle [send]="send.bind(this)"></app-liftcycle>
Copier après la connexion
public name: string = "jack";
public send(): void {
    console.log(this.name);
}
Copier après la connexion

Composant enfant :

<button (click)="childSend()">childSend</button>
Copier après la connexion
@Input() send: Function;
public childSend() {
    this.send();
}
Copier après la connexion

Pour plus de connaissances liées à la programmation, veuillez visiter : Vidéo de 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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!