Angularの親子コンポーネント通信の詳細な説明

Angularの親子コンポーネント通信の詳細な説明

使用されるAPI

Input - 子コンポーネントで許容されるプロパティを定義します。親コンポーネントはこれを使用して子コンポーネントにデータを渡すことができます。

Output - 子コンポーネントの出力プロパティ。親コンポーネントに対応するアクションを実行するように通知するには、このプロパティは EventEmitter イベント タイプである必要があります。

EventEmitter - @Output ディレクティブを持つコンポーネントで使用され、カスタム イベントを同期的または非同期的に発行し、インスタンスをサブスクライブしてこれらのイベントのハンドラーを登録します。

簡単な例

リスト内のサブコンポーネントをレンダリングし、サブコンポーネントをクリックして親コンポーネントに操作を実行するように通知します。

人.ts

エクスポートインターフェースPerson {
  名前: 文字列;
  年齢: 番号;
  性別: 文字列;
}

親コンポーネント

'@angular/core' から Component、OnInit をインポートします。
'./person' から { Person } をインポートします。
@成分({
  セレクター: 'app-comp-parent',
  テンプレート: `
    <app-comp-child
      *ngFor="let person of personList"
      (itemClick)="onItemClick($event)"
      [データ]="人"
    </app-comp-child> ...
  `、
})
CompParentComponentクラスをエクスポートし、OnInitを実装します。
  人リスト: 人[] = [
    { 名前: '张三', 年齢: 21, 性別: '男' },
    { 名前: 'Li Si'、年齢: 25、性別: '男性' },
    { 名前: '李璃', 年齢: 20, 性別: '女' },
  ];
  コンストラクタ(){}
  ngOnInit(): void { }
  onItemClick(アイテム: 人){
    console.log('クリック人: ', アイテム);
  }
}

サブコンポーネント

'@angular/core' から Component、EventEmitter、Input、OnInit、Output } をインポートします。
'./person' から { Person } をインポートします。
@成分({
  セレクター: 'app-comp-child',
  テンプレート: `
    <div (クリック)="itemClick.emit(データ)">
      名前: {{ data.name }}
      年齢: {{ data.age }}
      性別: {{ data.sex }}
    </div>
  `、
})
CompChildComponentクラスをエクスポートし、OnInitを実装します。
  @Input() データ!: Person;
  @Output() itemClick = 新しい EventEmitter();
  コンストラクタ(){}
  ngOnInit(): void { }
}

効果

レンダリング

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Angular2 親子コンポーネント通信の例
  • Angular 2 親コンポーネントと子コンポーネント間の共有サービス通信の実装
  • Angular2 親子コンポーネントのデータ通信例

<<:  Web フォントの読み込みを最適化する方法をご存知ですか?

>>:  ドラッグ効果を実現するための純粋なCSSコード

推薦する

シンプルなデータ応答システムを実装する

目次1. デップ2. 観察者を理解する3. 監視と観察者を理解する4. トリガーの依存性5. プロセ...

LinuxでのDockerのインストールチュートリアル

Docker パッケージは、デフォルトの CentOS-Extras リポジトリにすでに含まれていま...

MySQLの左結合を内部結合に素早く変換するプロセス

日々の最適化プロセス中に、奇妙なことに気付きました。同じ SQL にまったく異なる 2 つの実行プラ...

nginx のインストールが完了した後に PHP を解析できない問題の解決方法

目次方法1方法2 nginxをインストールした後、PHPコードを解析できないことがわかりました。解決...

WeChatアプレットの入力レベルとテキストエリアレベルの浸透率が高すぎる問題の解決策

WeChat ミニプログラムのネイティブ コンポーネントであるカメラ、キャンバス、入力 (フォーカス...

ウェブデザイナーが持つべき7つのスキル

Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...

MySQL はどのようにしてデータの整合性を確保するのでしょうか?

オンライン ビジネスにとってデータの一貫性と整合性が重要であることは明らかです。データが失われないよ...

Sitemesh チュートリアル - ページ装飾技術の原理と応用

1. 基本概念1. Sitemeshはページ装飾技術です。 1 : フィルターを通してページアクセス...

フロントエンド開発に必須:推奨されるブラウザ互換性テストツール 12 選

フロントエンド開発者にとって、さまざまな主要ブラウザのさまざまなバージョンでコードが適切に動作するこ...

CSS変数がJSインタラクティブコンポーネント開発にもたらす改善と変更のサンプルコードの詳細な説明

1. CSS変数がもたらす質的変化CSS 変数によってもたらされる改善は、CSS コードの節約や C...

PID を作成できないために MySQL が起動できない問題を解決する方法

問題の説明MySQL 起動エラー メッセージは次のとおりです。 mysqld を起動します (sys...

Linux で lvm 論理ボリューム パーティションのサイズを調整するチュートリアル (xfs や ext4 などのさまざまなファイル システム用)

序文システムをインストールしたときに、パーティション領域を適切に割り当てませんでした。その後のメンテ...

CSS3で実装されたダイナミックな星空の背景

結果:実装コードhtml <link href='https://fonts.goog...

MySQL でのデータベース間クエリの例

序文MySQL では、クロスデータベース クエリは主に 2 つの状況に分けられます。1 つは同じサー...

CentOS7にMySQL 8.0.26をインストールする手順

1. まず、お使いのマシンに応じて、MySQL 公式サイトから対応するデータベースをダウンロードしま...