ホームページ ウェブフロントエンド jsチュートリアル Angular コンポーネントはどのように通信するのでしょうか?親子コンポーネント通信の 2 つの方法

Angular コンポーネントはどのように通信するのでしょうか?親子コンポーネント通信の 2 つの方法

Aug 06, 2021 am 10:32 AM
angular コンポーネント通信

この記事では、Angular におけるコンポーネント通信を理解し、親コンポーネントと子コンポーネント間の通信、および直接関係のないコンポーネント間の通信の方法を紹介します。

Angular コンポーネントはどのように通信するのでしょうか?親子コンポーネント通信の 2 つの方法

実際のアプリケーションでは、コンポーネントはツリー構造で関連付けられるため、コンポーネント間の関係は主に次のとおりです。

  • 父と息子の関係

  • #兄弟関係

  • ##直接的な関係なし

    ##【 関連チュートリアル推奨事項: "
  • angular チュートリアル
"]

環境の準備: 1.

header# を作成します。 ##コンポーネント:

ng g c コンポーネント/ヘッダー

<app-button></app-button>
<app-title></app-title>
<app-button></app-button>
ログイン後にコピー
export class HeaderComponent implements OnInit {

  constructor() {}

  ngOnInit(): void {}
}
ログイン後にコピー
2. title

コンポーネントを作成します:

ng g c コンポーネント/タイトル

<span>{{title}}</span>
ログイン後にコピー
export class TitleComponent implements OnInit {

  public title: string = &#39;标题&#39;;

  constructor() {}

  ngOnInit(): void {}
}
ログイン後にコピー
3. button

コンポーネントを作成します:

ng g cComponents/button

<button>{{ btnName }}</button>
ログイン後にコピー
export class ButtonComponent implements OnInit {
  public btnName: string = &#39;按钮&#39;;

  constructor() {}

  ngOnInit(): void {}
}
ログイン後にコピー

## を直接呼び出します。 #親子関係コンポーネントに適用されます。直接呼び出しにより親子コンポーネントの結合が高まることに注意してください。明確にするために、直接呼び出しが必要です。

1. アプリとヘッダーの間に親子コンポーネント関係が形成されるように、ヘッダー コンポーネントをアプリにマウントします。2.

を使用します。 # コンポーネントに名前を付けます:

3。ヘッダー コンポーネントはまだ非常に空です。展開しましょう。そうでない場合、何を呼び出すか?<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>export class HeaderComponent implements OnInit { public name: string = &amp;#39;HeaderComponent&amp;#39;; printName(): void { console.log(&amp;#39;component name is&amp;#39;, this.name); } }</pre><div class="contentsignin">ログイン後にコピー</div></div>4。コンポーネントが展開された後、親コンポーネント app

<app-header #header></app-header>
<p>
  调用子组件属性: {{ header.name }}
  <button (click)="header.printName()">调用子组件函数</button>
</p>
ログイン後にコピー

5 のサブコンポーネント ヘッダーにあるプロパティと関数を呼び出すことができます。操作はコンポーネントの HTML テンプレートで実行されますが、場合によっては、親コンポーネントの ts クラスでサブコンポーネントを操作する必要もあります。次に説明します。

6. 新しいデコレーター

@ViewChild(Component)

export class AppComponent {
  title = &#39;angular-course&#39;;

  @ViewChild(HeaderComponent)
  private header!: HeaderComponent;

	// 声明周期钩子: 组件及子组件视图更新后调用,执行一次
  ngAfterViewInit(): void {
    // 调用子组件属性
    console.log(this.header.name);
    // 调用子组件函数
    this.header.printName();
  }
}
ログイン後にコピー

@Input および @Output

を使用する必要があります。 親子関係コンポーネントに適用可能

1. header コンポーネントで

title

を定義することで、この問題を解決します。結合された title コンポーネントでの直接呼び出しは、複雑な展開の問題を引き起こします2. title# の title

属性に @Input() 装飾を追加します。 ## コンポーネント コンテナ:

@Input() public title: string = 'Title';3. ヘッダー コンポーネントに title 属性を追加し、値を割り当てます: public title : string = 'I am New title';

4.

header## の html テンプレートで

title

コンポーネントを使用します。 # コンポーネントは次のとおりです: <app-title [title]="title"></app-title>5. ここまでの効果を見てみましょう。インターフェイスは見にくいですが、次回はこのコンポーネントを使用します title?

6 を設定したほうが便利ですか。上記の手順により、親コンポーネントのデータが子コンポーネントに渡されるので、続けましょう 子コンポーネントのデータがどのように親コンポーネントに渡されるかを見てみましょう? @Output()

デコレータを使用して次のコードを実装しましょう

Angular コンポーネントはどのように通信するのでしょうか?親子コンポーネント通信の 2 つの方法7.

title

コンポーネントで titleChange 属性を ts クラスに追加します:

@Output() public titleChange = new EventEmitter();

8. title コンポーネントの ts クラス <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>ngOnInit(): void { // 定时将子组件的数据进行派发 setInterval(() =&gt; { this.titleChange.emit(this.title); }, 1500); }</pre><div class="contentsignin">ログイン後にコピー</div></div>9 にデータを定期的にディスパッチします。次に、ヘッダーの親コンポーネントを変更して、ディスパッチされたデータを受信しましょう:

<app-title 
	[title]="title" 
  (titleChange)="onChildTitleChange($event)">
</app-title>
ログイン後にコピー
onChildTitleChange(value: any) {
	console.log(&#39;onChildTitleChange: >>&#39;, value);
}
ログイン後にコピー

コミュニケーションのためにサービスの単純な関心を使用する

直接関係のないコンポーネントに適用されます

1. サービスを通じて通信する必要があるため、まずサービス ng s services/EventBus

を作成し、タイプ

Subject## の属性を宣言します。 # コミュニケーションを支援するためです Angular コンポーネントはどのように通信するのでしょうか?親子コンポーネント通信の 2 つの方法

@Injectable({
  providedIn: &#39;root&#39;,
})
export class EventBusService {
  public eventBus: Subject<any> = new Subject();

  constructor() {}
}
ログイン後にコピー

2. トラブルを避けるため、

header のボタン コンポーネントとタイトル コンポーネントは直接的な関係がないコンポーネントであるため、コンポーネントは再作成されませんでした。関係。 3. button

コンポーネントを変換し、

triggerEventBus 関数

export class ButtonComponent implements OnInit {
  public btnName: string = &#39;按钮&#39;;

  constructor(public eventBusService: EventBusService) {}

  ngOnInit(): void {}

  public triggerEventBus(): void {
    this.eventBusService.eventBus.next(&#39;我是按钮组件&#39;);
  }
}
ログイン後にコピー

4 をトリガーするクリック イベントを追加します。

titleコンポーネント内のシミュレートされたデータの取得

export class TitleComponent implements OnInit {

  constructor(public eventBusService: EventBusService) {}

  ngOnInit(): void {
    this.eventBusService.eventBus.subscribe((value) => {
      console.log(value);
    });
  }
}
ログイン後にコピー

Cookie、セッション、またはローカルストレージを使用して通信

1. これは非常に簡単です。デモには引き続き title コンポーネントと button コンポーネントを使用します。今回は、タイトル コンポーネントにデータを保存します。 button コンポーネントからデータを取得します。 localstorage のみを説明します。他はすべて同じです。

2.

title コンポーネントの ngOnInit() フックの titlelocalstorage に保存します: window.localStorage.setItem('title', this.title);

3. ボタン コンポーネントのデータを取得します:

const title = window.localStorage.getItem('title');

結論:

この記事では、分割されたコンポーネントが適切な通信を実行できるように、Angular のコンポーネント通信を紹介しました。は保証を提供しており、これまでのコンポーネントの使用はタグの導入によって行われていました。

元のアドレス: https://juejin.cn/post/6991471300837572638

著者: Xiaoxin

プログラミング関連の知識について詳しくは、次のサイトをご覧ください。 :

プログラミング入門! !

以上がAngular コンポーネントはどのように通信するのでしょうか?親子コンポーネント通信の 2 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu 24.04 に Angular をインストールする方法 Ubuntu 24.04 に Angular をインストールする方法 Mar 23, 2024 pm 12:20 PM

Angular.js は、動的アプリケーションを作成するための無料でアクセスできる JavaScript プラットフォームです。 HTML の構文をテンプレート言語として拡張することで、アプリケーションのさまざまな側面を迅速かつ明確に表現できます。 Angular.js は、コードの作成、更新、テストに役立つさまざまなツールを提供します。さらに、ルーティングやフォーム管理などの多くの機能も提供します。このガイドでは、Ubuntu24 に Angular をインストールする方法について説明します。まず、Node.js をインストールする必要があります。 Node.js は、ChromeV8 エンジンに基づく JavaScript 実行環境で、サーバー側で JavaScript コードを実行できます。ウブにいるために

Angular Learning State Manager NgRx の詳細な説明 Angular Learning State Manager NgRx の詳細な説明 May 25, 2022 am 11:01 AM

この記事では、Angular のステートマネージャー NgRx について深く理解し、NgRx の使用方法を紹介します。

Angular で Monaco エディターを使用する方法の簡単な分析 Angular で Monaco エディターを使用する方法の簡単な分析 Oct 17, 2022 pm 08:04 PM

Angularでモナコエディタを使用するにはどうすればよいですか?以下の記事は、最近業務で使用したangularでのmonaco-editorの使い方を記録したものですので、皆様のお役に立てれば幸いです。

Angular のサーバーサイド レンダリング (SSR) について説明する記事 Angular のサーバーサイド レンダリング (SSR) について説明する記事 Dec 27, 2022 pm 07:24 PM

Angular Universal をご存知ですか?これは、Web サイトがより優れた SEO サポートを提供するのに役立ちます。

フロントエンド開発に PHP と Angular を使用する方法 フロントエンド開発に PHP と Angular を使用する方法 May 11, 2023 pm 04:04 PM

インターネットの急速な発展に伴い、フロントエンド開発テクノロジーも常に改善され、反復されています。 PHP と Angular は、フロントエンド開発で広く使用されている 2 つのテクノロジーです。 PHP は、フォームの処理、動的ページの生成、アクセス許可の管理などのタスクを処理できるサーバー側スクリプト言語です。 Angular は、単一ページ アプリケーションの開発やコンポーネント化された Web アプリケーションの構築に使用できる JavaScript フレームワークです。この記事では、PHPとAngularをフロントエンド開発に使用する方法と、それらを組み合わせる方法を紹介します。

Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Mar 15, 2024 pm 04:51 PM

Angular フレームワークのコンポーネントのデフォルトの表示動作は、ブロックレベルの要素ではありません。この設計の選択により、コンポーネント スタイルのカプセル化が促進され、開発者が各コンポーネントの表示方法を意識的に定義することが促進されます。 CSS プロパティの表示を明示的に設定することで、Angular コンポーネントの表示を完全に制御して、目的のレイアウトと応答性を実現できます。

Angular の独立したコンポーネントの簡単な分析とその使用方法を説明します。 Angular の独立したコンポーネントの簡単な分析とその使用方法を説明します。 Jun 23, 2022 pm 03:49 PM

この記事では、Angular の独立コンポーネント、Angular で独立コンポーネントを作成する方法、および既存のモジュールを独立コンポーネントにインポートする方法について説明します。

プロジェクトが大きすぎる場合はどうすればよいですか? Angular プロジェクトを合理的に分割するにはどうすればよいでしょうか? プロジェクトが大きすぎる場合はどうすればよいですか? Angular プロジェクトを合理的に分割するにはどうすればよいでしょうか? Jul 26, 2022 pm 07:18 PM

Angular プロジェクトが大きすぎます。適切に分割するにはどうすればよいですか?次の記事では、Angular プロジェクトを合理的に分割する方法を紹介します。

See all articles