ホームページ > ウェブフロントエンド > jsチュートリアル > Angular の親コンポーネントと子コンポーネントの間で通信するにはどうすればよいですか?父親から息子へ価値観を渡す方法の簡単な分析

Angular の親コンポーネントと子コンポーネントの間で通信するにはどうすればよいですか?父親から息子へ価値観を渡す方法の簡単な分析

青灯夜游
リリース: 2021-08-10 10:02:07
転載
1902 人が閲覧しました

Angular親コンポーネントと子コンポーネントの間で通信するにはどうすればよいですか?この記事では、Angularの親子コンポーネントの値の受け渡し方法を紹介します。

Angular の親コンポーネントと子コンポーネントの間で通信するにはどうすればよいですか?父親から息子へ価値観を渡す方法の簡単な分析

入力と出力を通じて値を渡す

親コンポーネント: html と ts

<app-liftcycle [name]="name" (changeName)="changeName($event)"></app-liftcycle>
ログイン後にコピー
public name: string = "jack";
public changeName(value: string) {
    this.name = value;
}
ログイン後にコピー

子コンポーネント: html と ts

<div (click)="emit()">{{name}}</div>
ログイン後にコピー
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属性");
}
ログイン後にコピー

[関連チュートリアルの推奨事項: "angular チュートリアル"]

セッターを介してプロパティの変更をリッスンする

親コンポーネントは上記と同じで、サブコンポーネントは次のとおりです。

private _name: string = "";
@Input() 
public get name(): string {
    return this._name;
}
public set name(value: string) {
    this._name = value + "定义结构";
}
ログイン後にコピー

ngOnChanges フック関数を使用して入力属性の変更を監視します

ngOnChanges は setter メソッドよりも簡単です複数の属性を監視する場合。

@Input() name: string;
ngOnChanges(changes: SimpleChanges): void {
    (({name}) => {
        console.log(name.currentValue,name.previousValue);
    })(changes);
}
ログイン後にコピー

子コンポーネントのメソッドとプロパティは、親コンポーネント html のテンプレート変数を通じて呼び出されます。

テンプレート変数は、子コンポーネントへの参照を取得します。 親コンポーネント:

<app-liftcycle #child></app-liftcycle>
<button (click)="child.childFn()">按钮</button>
ログイン後にコピー

子コンポーネント:

public childFn() {
    console.log("通过模板变量调用子组件中的方法");
}
ログイン後にコピー

親コンポーネントは ViewChild を通じて子コンポーネント インスタンスを取得します

<app-liftcycle [name]="name" (changeName)="changeName($event)" #child></app-liftcycle>
<button (click)="childFn()">childFn</button>
ログイン後にコピー
@ViewChild("child") child: LiftcycleComponent;
public childFn(): void {
    this.child.childFn();
}
ログイン後にコピー

サービスを通じて通信

サービス:

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");
    }
}
ログイン後にコピー

親コンポーネント:

constructor(private commun: CommunService) { }
public send(): void {
    this.commun.communSend();
}
ログイン後にコピー

子コンポーネント:

constructor(private commun: CommunService) { 
    this.commun.commun.subscribe((value) => {console.log(value)});
}
ログイン後にコピー

親コンポーネントの配信方法

親コンポーネントは属性を子コンポーネントのメソッドに渡し、子コンポーネントはそれを呼び出します。これは通常推奨されません。React はこの通信メソッドを使用します。 これによるバインディングは複雑になる可能性があるため、angular は推奨されません。 React Hooks の出現も、部分的には次のような理由によるものです。 これがクラスクラスの複雑さです。 親コンポーネント:

<app-liftcycle [send]="send.bind(this)"></app-liftcycle>
ログイン後にコピー
public name: string = "jack";
public send(): void {
    console.log(this.name);
}
ログイン後にコピー

子コンポーネント:

<button (click)="childSend()">childSend</button>
ログイン後にコピー
@Input() send: Function;
public childSend() {
    this.send();
}
ログイン後にコピー

プログラミング関連の知識については、プログラミング ビデオをご覧ください。 !

以上がAngular の親コンポーネントと子コンポーネントの間で通信するにはどうすればよいですか?父親から息子へ価値観を渡す方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート