2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ionic3に入門してみる~その7 Angular4チュートリアル⑤~

Posted at

サービス

HeroesComponentにデータまで記載されている。
HeroesComponentからデータを分離し、ユニットテストなどを容易に行うことができるようにする。

なぜサービスが必要なのか?

コンポーネント内では直接データの取得や保存を行うべきではありません。
もちろん、故意に仮のデータを渡してもいけません。
コンポーネントはデータの受け渡しに集中し、その他の処理はサービスクラスへ委譲するべきです。

コンポーネントの定義
https://qiita.com/tokky_se/items/3e97506e81fad6013f04

コンポーネント=構成要素
要するに画面を構成する部品のこと。

なので実際に表示されるデータ自体は独立させてきましょう!

下記から、アプリケーション全体でヒーローを取得できる HeroService を作成します。
そのサービスは new で生成するのではなく、Angular による 依存性の注入(いわゆるDI) で、 HeroesComponent コンストラクタに注入します。
DIについては、下記などを参照してください。
https://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f

要するに、ここでは単純にデータの分離を意味していると思われます。

HeroService の作成

ionic CLIで作成してみましょう。
コマンドは下記です。

ionic generate provider hero

serviceではなくproviderとなっています。気をつけてください。
下記のように作成されたことを確認してください。
image.png

ヒーローデータの取得

HeroService はさまざまな場所からヒーローデータを取得する可能性があります。— 外部Webサービス、ローカルストレージ、またはモックデータかもしれません。
コンポーネントからデータ取得ロジックを切り離すということは、そういったサービス側の事情にとらわれず、いつでも実装方針の変更ができることを意味しています。 コンポーネント側は、サービスがどのように動いていようと関係ありません。
この章の実装では、引き続き モックヒーロー を使用します。

下記のように変更します。(クラス名はHeroProviderのままとしました)
なおデフォルトのコンストラクタはhttpClientを使用するので一旦コメントアウトしました。(次くらいのチュートリアルに出てきます)
image.png

HeroService の提供

依存性注入できるようにする云々の話があるのですが、generate providerで作成した場合はすでに下記のように登録されているはずです。
image.png

HeroesComponent の更新と注入

HeroesComponentも合わせて変えていきましょう。
HEROESのインポートを削除し、代わりにHeroService(HeroProvider)をインポートします。
heroes プロパティの定義を、単純な配列の宣言に置き換えます。
さらにgetHeroes()を追加し、Service(Provider)からヒーローを読み込むようにします。
そして最後にngOnInitでのgetHeroesメソッド呼び出しを書きます。
image.png

ここまでで実際にserveしてみて確認すると、変わらず動作するはずです。
モックヒーローを使いまわしているので、表示は何も変わりませんが…。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?