Angular でのコンポーネント通信と依存関係の注入について理解します。
Angularコンポーネント間で通信するにはどうすればよいですか?依存性注入とは何ですか?以下の記事ではコンポーネントの通信方法の概要と依存性注入について紹介していますので、ご参考になれば幸いです。
#1. コンポーネントの通信
##1.1 コンポーネント内部へのデータの受け渡し<app-favorite [isFavorite]="true"></app-favorite>
// favorite.component.ts
import { Input } from '@angular/core';
export class FavoriteComponent {
@Input() isFavorite: boolean = false;
}
[]1.2 コンポーネントは外部にデータを送信しますを追加します。コンポーネントで受け取った後は、ブール型になります。# は追加しないでください。 ##[]
は、コンポーネントで受信された後の文字列型である通常の値をバインドすることを示します。 [関連チュートリアルの推奨事項: "
angular チュートリアル"]
要件 : 子コンポーネントのボタンをクリックして、親コンポーネントにデータを渡します
<!-- 子组件模板 --> <button (click)="onClick()">click</button>
// 子组件类 import { EventEmitter, Output } from "@angular/core" export class FavoriteComponent { @Output() change = new EventEmitter() onClick() { this.change.emit({ name: "张三" }) } }
<!-- 父组件模板 --> <app-favorite (change)="onChange($event)"></app-favorite>
// 父组件类 export class AppComponent { onChange(event: { name: string }) { console.log(event) } }
2.1 概要
依存性注入 (Dependency Injection
) は、DI と呼ばれ、オブジェクト指向プログラミングにおける設計原則であり、コード間の結合度
class MailService { constructor(APIKEY) {} } class EmailSender { mailService: MailService constructor() { this.mailService = new MailService("APIKEY1234567890") } sendMail(mail) { this.mailService.sendMail(mail) } } const emailSender = new EmailSender() emailSender.sendMail(mail)
EmailSender クラスは実行時に MailService クラスを使用する必要があります。
EmailSender クラスは
MailService# に依存します。 ## クラス、 MailService
クラスは、EmailSender
クラスの依存関係です。 上記の書き方では結合度が高すぎてコードが堅牢ではありません。
MailService
クラスがパラメータ配信メソッドを変更すると、
クラスのインスタンス化時に EmailSender
クラスの書き込みメソッドも変更されます。依存関係を constructor
コンストラクター パラメーターの形式でクラスの内部に注入する場合、この記述方法は依存関係の注入です。
依存関係の挿入により、コード間の結合が軽減され、コードの保守性が向上します。 MailService
クラス内のコードを変更しても、EmailSender
クラス
2.2
フレームワーク Angular
には独自の DI フレームワークがあり、依存関係注入の実装プロセスを非表示にします。開発者向けには、複雑な依存関係のみが提供されます。インジェクション機能は非常に単純なコードで使用できます。
Angular
の DI
フレームワークには 4 つの中心的な概念があります:
Dependency
:コンポーネントが依存するインスタンス オブジェクト、サービス インスタンス オブジェクト
#Token
: サービス インスタンス オブジェクトの識別子を取得します
- #Injector
: インジェクター。サービス クラスのインスタンス オブジェクトの作成と維持、およびサービス インスタンス オブジェクトのコンポーネントへの注入を担当します。
- プロバイダ
: インジェクタのオブジェクトを設定し、サービス クラスを指定してサービス インスタンス オブジェクトを作成し、インスタンス オブジェクトの識別子を取得します。
- 2.2.1 インジェクター
インジェクター
インジェクターは、サービス クラス インスタンス オブジェクトの作成とサービス クラス インスタンスの変換を担当します。オブジェクトを必要なコンポーネントに挿入するには
インジェクターを作成します
class EmailSender {
mailService: MailService
constructor(mailService: MailService) {
this.mailService = mailService;
}
}
const mailService = new MailService("APIKEY1234567890")
const emailSender = new EmailSender(mailService)
インジェクターでサービス クラス インスタンス オブジェクトを取得します
import { ReflectiveInjector } from "@angular/core" // 服务类 class MailService {} // 创建注入器并传入服务类 const injector = ReflectiveInjector.resolveAndCreate([MailService])
サービス インスタンス オブジェクトはシングルトン モードであり、インジェクターはサービス インスタンスの作成後にそれをキャッシュします。
const mailService = injector.get(MailService)
ログイン後にコピーインジェクターが異なると、異なるサービス インスタンス オブジェクトが返されます
const mailService1 = injector.get(MailService) const mailService2 = injector.get(MailService) console.log(mailService1 === mailService2) // true
ログイン後にコピーサービス インスタンスの検索は、関数スコープ チェーンと似ています。現在のレベルが見つかった場合は、現在のレベルを使用します。現在のレベルが見つからない場合は、親に移動します。見つけるには
const injector = ReflectiveInjector.resolveAndCreate([MailService]) const childInjector = injector.resolveAndCreateChild([MailService]) const mailService1 = injector.get(MailService) const mailService2 = childInjector.get(MailService) console.log(mailService1 === mailService2) // false
ログイン後にコピー- 2.2.2 Provider Provider
のオブジェクトを設定します。インジェクター、サービス クラスと作成インスタンス オブジェクトを指定します。 アクセス サービス インスタンス オブジェクトの識別子const injector = ReflectiveInjector.resolveAndCreate([MailService])
const childInjector = injector.resolveAndCreateChild([])
const mailService1 = injector.get(MailService)
const mailService2 = childInjector.get(MailService)
console.log(mailService1 === mailService2) // true
アクセス依存オブジェクトの識別子は文字列型
const injector = ReflectiveInjector.resolveAndCreate([ { provide: MailService, useClass: MailService } ])
#useValue
- インスタンス オブジェクトと外部参照の間に疎結合関係を確立します。外部オブジェクトは、識別子が変更されない限り、内部コードがどのように変更されても、外部の世界には影響しません
- プログラミング関連の知識については、
プログラミング ビデオ
をご覧ください。 !
const injector = ReflectiveInjector.resolveAndCreate([ { provide: "mail", useClass: MailService } ]) const mailService = injector.get("mail")
以上がAngular でのコンポーネント通信と依存関係の注入について理解します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

Angular Route で事前にデータを取得するにはどうすればよいですか?以下の記事ではAngular Routeから事前にデータを取得する方法を紹介していますので、ご参考になれば幸いです。
