Angular 4依存注入チュートリアルの2コンポーネントサービス注入
5747 ワード
目次 Angular 4依存注入チュートリアルの1つ依存注入概要 Angular 4依存注入チュートリアルの2コンポーネントサービス注入 Angular 4依存注入チュートリアルの3 ClassProviderの使用 Angular 4依存注入チュートリアルの4 FactoryProviderの使用 Angular 4依存注入チュートリアルの5 FactoryProvider構成依存オブジェクト Angular 4依存注入チュートリアルの6 Injectableアクセサリ Angular 4依存注入チュートリアルの7 ValueProviderの使用 Angular 4依存注入チュートリアルの8 InjectTokenの使用 読書の心得
このチュートリアルの開発環境と開発言語: Angular 4 + Angular CLI TypeScript
基礎知識
Angularコンポーネントの作成方法
Angularでは、次のように簡単なコンポーネントを作成します.
Angularサービスの作成方法
Angularでは、次のように簡単なサービスを作成します.
コンポーネントへの注入サービス
基礎知識を説明した後、ヒーローの情報を表示するための新しいコンポーネント
次に、
予期せぬことがなければ、
まさかすべてが終わったのか、No!No!この授業のテーマは、コンポーネントにサービスを注入する方法を紹介することです.現在の
上記の問題に対して、理想的な方法は、データ共有を実現するために heros-ヒーローのリスト情報を保存するための getHeros()-ヒーローのリスト情報を取得するための
コンポーネントでのHeroServiceの使用
コンポーネントでは を導入する.声明 注入
完全なコードは次のとおりです.
もちろん2つの方法は影響しません.私たちが最終的に実現しなければならない機能ですが、この2つの方法には違いがあるに違いありません.興味のある読者に、考えてみてください.多くの場合、
話があるんだ
なぜ
実際には、
このチュートリアルの開発環境と開発言語:
基礎知識
Angularコンポーネントの作成方法
Angularでは、次のように簡単なコンポーネントを作成します.
@Component({
selector: 'app-root',
template: `
{{title}}
`
})
export class AppComponent {
title: string = 'App Works';
}
Angularサービスの作成方法
Angularでは、次のように簡単なサービスを作成します.
export class DataService {
getData() {
return ['Angular', 'React', 'Vue'];
}
}
コンポーネントへの注入サービス
基礎知識を説明した後、ヒーローの情報を表示するための新しいコンポーネント
HeroComponent
を作成します.具体的には、次のようになります.import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-hero',
template: `
-
ID: {{hero.id}} - Name: {{hero.name}}
`
})
export class HeroComponent implements OnInit {
heros: Array;
ngOnInit() {
this.heros = [
{ id: 11, name: 'Mr. Nice' },
{ id: 12, name: 'Narco' },
{ id: 13, name: 'Bombasto' },
{ id: 14, name: 'Celeritas' },
{ id: 15, name: 'Magneta' }
];
}
}
HeroComponent
コンポーネントでは、ngOnInit
フックでデータ初期化を行い、ngFor
命令を用いてヒーローリストの情報を表示する.HeroComponent
コンポーネントの作成が完了しました.このコンポーネントの機能を検証します.まずAppModule
にHeroComponent
コンポーネントを導入し、具体的には以下の通りである.import { HeroComponent } from './hero/hero.component';
@NgModule({
declarations: [
AppComponent,
HeroComponent
],
...
})
export class AppModule { }
次に、
AppComponent
コンポーネントを更新します.具体的には、次のとおりです.import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
`
})
export class AppComponent {}
予期せぬことがなければ、
http://localhost:4200/
ページにアクセスすると、次の情報が表示されます.ID: 11 - Name: Mr. Nice
ID: 12 - Name: Narco
ID: 13 - Name: Bombasto
ID: 14 - Name: Celeritas
ID: 15 - Name: Magneta
まさかすべてが終わったのか、No!No!この授業のテーマは、コンポーネントにサービスを注入する方法を紹介することです.現在の
HeroComponent
コンポーネントでは、ヒーローリスト情報は固定されており、実際の開発シーンでは、リモートサーバから対応する情報を取得する必要があります.しかし、私たちはこの問題をしばらく考えないで、別のコンポーネントも同じ英雄リスト情報を利用する必要があると仮定して、私たちはどのようにして、まさか直接「究極の絶技」-Copy && Paste
に行きますか.もちろんこれは「究極の絶技」ですが、勝手に使えませんか(殴り合いを恐れないなら、勝手にしてください).上記の問題に対して、理想的な方法は、データ共有を実現するために
HeroService
サービスを作成することである.やると言ったらすぐにHeroService
サービスを作成します.具体的には以下の通りです.export class HeroService {
heros: Array = [
{ id: 11, name: 'Mr. Nice' },
{ id: 12, name: 'Narco' },
{ id: 13, name: 'Bombasto' },
{ id: 14, name: 'Celeritas' },
{ id: 15, name: 'Magneta' }
];
getHeros() {
return this.heros;
}
}
HeroService
サービスでは、heros
プロパティとgetHeros()
メソッドを定義します.HeroService
サービスを作成した後、コンポーネントでHeroService
サービスを使用する方法について説明します.コンポーネントでのHeroServiceの使用
コンポーネントでは
HeroService
サービスが使用され、主に3つのステップに分けられます.HeroService
サービスimport { HeroService } from '../hero.service';
HeroService
サービス@Component({
selector: 'app-hero',
...
providers: [HeroService]
})
HeroService
サービスexport class HeroComponent implements OnInit {
constructor(private heroService: HeroService) { }
}
完全なコードは次のとおりです.
import { Component, OnInit } from '@angular/core';
import { HeroService } from '../hero.service';
@Component({
selector: 'app-hero',
template: `
-
ID: {{hero.id}} - Name: {{hero.name}}
`,
providers: [HeroService]
})
export class HeroComponent implements OnInit {
constructor(private heroService: HeroService) { }
heros: Array;
ngOnInit() {
this.heros = this.heroService.getHeros();
}
}
providers: [HeroService]
の行を見ると、HeroService
サービスを以下の方法で構成する可能性があるため、一部の読者は困惑すると信じています.@NgModule({
declarations: [
AppComponent,
HeroComponent
],
...
providers: [HeroService],
bootstrap: [AppComponent]
})
export class AppModule { }
もちろん2つの方法は影響しません.私たちが最終的に実現しなければならない機能ですが、この2つの方法には違いがあるに違いありません.興味のある読者に、考えてみてください.多くの場合、
NgModule
のMetadata情報に対応するサービスを構成することが推奨される.話があるんだ
なぜ
HeroService
を構成し、HeroComponent
コンポーネントクラスの構造関数でタイプ宣言を行う必要があるのですか?import { HeroService } from '../hero.service';
export class HeroComponent implements OnInit {
constructor(private heroService: HeroService) { }
}
実際には、
@NgModule({...})
または@Component({...})
Metadataでは、Provider
を構成する関連情報にすぎません.つまり、Angular DI(依存注入)システムに、構成されたprovider
情報に基づいて、対応する依存オブジェクトを作成する方法を教えます.一方,HeroComponent
組立体クラスでは,注入を構築することによって,Angular DIシステムに必要な依存オブジェクトタイプを教える.