概要Angularコンポーネント通信 コンポーネント ツリー、番号 1 はルート コンポーネント AppComponent です。 コンポーネントは疎結合されており、互いの知識が少ないほど良いです。 コンポーネント 4 のボタンをクリックすると、コンポーネント 5 の初期化ロジックがトリガーされます。 従来のアプローチ: ボタン 4 のクリック イベントでコンポーネント 5 のメソッドを呼び出します。タイトカップリング。 Angular: コンポーネント 4 がコンポーネント 5 の存在をまったく認識せずに実装されています。 疎結合を使用してコンポーネント間でデータを渡し、再利用性の高いコンポーネントを開発します。 入力プロパティと出力プロパティを使用して、親子関係にあるコンポーネント間でデータを渡します。 1. 入力および出力プロパティの概要コンポーネントはブラックボックス モデルとして設計されており、入力プロパティを使用して外部から受信した内容を宣言します。これらのものがどこから来たのかを知る必要はありません。 コンポーネントは、外部から必要なものが提供されたときに、何をすべきかを知るだけで済みます。 コンポーネントは出力プロパティを通じてイベントを発行し、外部の世界に興味深い内容を伝えます。どのコンポーネントにイベントが発行されるかを知る必要はありません。 興味のある人は誰でも、コンポーネントによって発行されるイベントをサブスクライブできます。 2. 入力属性サブコンポーネントは、@Input() デコレータで装飾された 2 つの入力プロパティを定義します。 @入力() 在庫コード: 文字列; @入力() 量:数値; 親コンポーネントは、属性を子コンポーネントの入力属性にバインドすることにより、stock 属性を子コンポーネントの stockCode 属性にバインドします。 <div> 私は親コンポーネントです</div> <div> <input type="text" [(ngModel)]="stock" placeholder="株コードを入力してください"> <app-order [stockCode]=在庫 [amount]="100"></app-order> </div> 3. プロパティバインディングは親コンポーネントから子コンポーネントへの一方向です。サブコンポーネントの stockCode の値を 3 秒ごとに Apple にリセットします。 OrderComponentクラスをエクスポートし、OnInitを実装します。 @入力() stockCode: 文字列; @入力() 量:数値; コンストラクタ() { 設定間隔(()=>{ this.stockCode = 'Apple' },3000) } ngOnInit() { } } 子コンポーネントの stockCode の値が Apple に変更されても、親コンポーネントの stock の値は変更されません。これは、バインディングが一方向であることを意味します。親コンポーネントのみが子コンポーネントを変更でき、子コンポーネントのプロパティを変更しても親コンポーネントには影響しません。 4. 出力プロパティAngular コンポーネントは EventEmitter オブジェクトを使用してカスタム イベントを発行し、他のコンポーネントで処理することができます。 EventEmitter は、Rxjs の Subject クラスのサブクラスです。レスポンシブ プログラミングでは、オブザーバーとしてもオブザーバーとしても使用できます。つまり、EventEmitter オブジェクトは、emit メソッドを通じてカスタム イベントを発行することができ、また、subscribe メソッドを通じて EventEmitter によって発行されたイベント ストリームをサブスクライブすることもできます。 EventEmit を使用してコンポーネント内からイベントを発行するにはどうすればよいですか? シナリオ例: 見積コンポーネント 証券取引所に接続し、株価の変化をリアルタイムで表示できるコンポーネントが必要だとします。このコンポーネントをさまざまな金融アプリケーションで再利用できるようにするには、株価をリアルタイムで表示するだけでなく、コンポーネントの外部に最新の株価を送信して、他のコンポーネントが株価の変化に基づいて対応するビジネス ロジックを実行できるようにする必要があります。 注: クラスまたはインターフェースを使用して特定のデータ構造を明示的に定義することをお勧めします。 1. まずIBMの株価のリアルタイムの変化をシミュレートするエクスポートクラス PriceQuoteComponent は OnInit を実装します { // 株価サービスに接続せず、乱数ジェネレータを使用して株価の変化をシミュレートし、株価コードと最新価格を表示します。stockCode:string="IBM"; 価格:数; コンストラクタ() { 設定間隔(()=>{ priceQuote:PriceQuote = new PriceQuote(this.stockCode,100*Math.random()); とします。 this.price=priceQuote.lastPrice; },1000) } ngOnInit() { } } //株価情報をカプセル化するために引用オブジェクトをカプセル化します //クラスまたはインターフェースを使用して特定のデータ構造を明確に定義することは良い習慣です export class PriceQuote { コンストラクター(public stockCode: string, //株価コード public lastPrice: number //最新価格) { } } 2. 情報を出力し、購読に興味がある人を外部に知らせるEventEmit の背後にある型は、発行されるイベント内のデータの型です。 '@angular/core' から Component、OnInit、EventEmitter、Output をインポートします。 @成分({ セレクター: 'app-price-quote', テンプレート URL: './price-quote.component.html', スタイル URL: ['./price-quote.component.css'] }) エクスポートクラス PriceQuoteComponent は OnInit を実装します { // 株価サービスに接続せず、乱数ジェネレータを使用して株価の変化をシミュレートし、株価コードと最新価格を表示します。stockCode: string = "IBM"; 価格: 数; @Output() // 出力イベントはOutputとして記述する必要があります //EventEmitter には汎用の lastPrice が必要です: EventEmitter<PriceQuote> = new EventEmitter(); // コンストラクタ() { 間隔を設定する(() => { priceQuote を作成します: PriceQuote = new PriceQuote(this.stockCode, 100 * Math.random()); this.price = priceQuote.lastPrice; //lastPrice を使用して値を出力します this.lastPrice.emit(priceQuote); }, 1000) } ngOnInit() { } } //株価情報をカプセル化するために引用オブジェクトをカプセル化します //クラスまたはインターフェースを使用して特定のデータ構造を明確に定義することは良い習慣です export class PriceQuote { コンストラクター(public stockCode: string, //株価コード public lastPrice: number //最新価格) { } } 3. 見積情報を受信し、親コンポーネントに表示する親コンポーネント テンプレートは、イベント バインディングを通じてこのイベントをキャプチャして処理します。 クラスAppComponentをエクスポートします。 在庫 = ""; 価格見積: 価格見積 = 新しい価格見積("", 0); //イベントの種類は、子コンポーネントが発行するときに発行されるデータのタイプです //親コンポーネントはpriceQuoteHandler(event:PriceQuote){を取得できます this.priceQuote=イベント; } } ステンシル <!-- デフォルトでは、イベント名は出力属性の名前になります --> <app-price-quote (lastPrice)="priceQuoteHandler($event)"></app-price-quote> <div> これは引用コンポーネントの外側にあります<br/> 株式コードは{{priceQuote.stockCode}}です。 株価は{{priceQuote.lastPrice | number:"2.0-2"}}です </div> デフォルトでは、イベント名は出力属性の名前です。イベント名は次のように変更できます。 @Output("priceChange") // イベントを起動するには出力が必要です //EventEmitter には汎用の lastPrice が必要です: EventEmitter<PriceQuote> = new EventEmitter(); テンプレートも変更され、 <app-price-quote (priceChange)="priceQuoteHandler($event)"></app-price-quote> 要約するイベントは出力プロパティを通じて発行され、データはイベントを通じて伝達されます。これらは、親コンポーネント テンプレートのイベント バインディングを通じてキャプチャされ、処理されます。 2 つのコンポーネント間に親子関係がない場合に、疎結合でデータを渡す方法。このとき、仲介モードを使用する必要があります。 上記は、Angular 親子コンポーネント間の通信の詳細な説明です。Angular 親子コンポーネント間の通信の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: 最新のmysql-5.7.21のインストールと設定方法
>>: Win10 インストール Linux システム チュートリアル ダイアグラム
1. openjdkを表示する rpm -qa|grep jdk 2. openjdk を削除します...
最近、Docker イメージのプルが非常に不安定です。遅く、タイムアウトすることがよくあります。 x...
この記事では、MySQL 8.0.15 winx64のインストールと設定方法を参考までに紹介します。...
IEでのRGBAとフィルター値の変換RGBA 透明度値IE フィルター値0.1 19 0.2 33 ...
Remax は、実行時に構文制限のないソリューションを採用した React を使用して小規模なプロ...
1. Linuxディスクの状態を確認する df -lh lsblkコマンドは、使用可能なすべてのブロ...
注意: 他のマシン (IP) は、承認なしではクライアント経由で MySQL データベースに接続でき...
一般的に、関数は実行する前に呼び出す必要があることはご存じのとおりです。以下に示すように、関数を定義...
Superset は、エレガントなインターフェースとデータ テーブルに基づく動的なデータ生成を主な機...
以前、上司からログイン後にチェックマークを表示できるプログラムを作るように言われたのですが、Baid...
CUDA インストール cuda をダウンロードサポートされているcudaバージョンを表示するには...
1. マスタースレーブレプリケーションとは何ですか?マスタースレーブレプリケーションは、スレーブデー...
目次序文1. バイナリツリー1.1. 二分木の走査1.2. jsを使用してバイナリツリーを表現する1...
この記事では、Centos7.3でのmysql5.7.18のインストールと初期パスワードの変更につい...
1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...