1
0

Angular でサービスを追加してみました。

Posted at

またサービスとやら難しいものを追加してしまいました。どうしてサービスって言うのでしょうか。無料だからでしょうか。とにかくコンポーネント以外のところからデータを取ってくることができるということがわかりました。
画面のデザインと表示するデータは分けて考えた方がいいそうです。
あくまで画面のデザインはコンポーネントを使い、表示するデータはサービスを使うためのようです。

うーん。そうなんですねって感じで進めますね。

1.サービスを作成します。

1-1.新しい汎用サービスを作成するコマンドを実行します。

ng generate service encyclopedia
(アウトプット)
1-1.PNG

2.新しいサービスに静的データを追加します。

2-1.encyclopedia.service.ts にデータを追加します。

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class EncyclopediaService {
+  encyclopediaList: Encyclopedia[] = [
+    {
+      id: 1,
+      name: 'Service Test Name 001'
+    },
+    {
+      id: 2,
+      name: 'Service Test Name 002'
+    }
+  ];

  constructor() { }
}

2-2.encyclopedia.service.ts にサービス関数を追加します。

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class EncyclopediaService {
  encyclopediaList: Encyclopedia[] = [
    {
      id: 1,
      name: 'Service Test Name 001'
    },
    {
      id: 2,
      name: 'Service Test Name 002'
    }
  ];
+
+  getAllEncyclopedias(): Encyclopedia[] {
+    return this.encyclopediaList;
+  }
+
+  getEncyclopediaById(id: number): Encyclopedia | undefined {
+    return this.encyclopediaList.find(encyclopedia => + encyclopedia.id === id);
+  }

  constructor() { }
}

2-3.encyclopedia.service.ts にインターフェイスをインポートします。

import { Injectable } from '@angular/core';
+ import { Encyclopedia } from './encyclopedia';

@Injectable({
  providedIn: 'root'
})
export class EncyclopediaService {
  encyclopediaList: Encyclopedia[] = [
    {
      id: 1,
      name: 'Service Test Name 001'
    },
    {
      id: 2,
      name: 'Service Test Name 002'
    }
  ];

  getAllEncyclopedias(): Encyclopedia[] {
    return this.encyclopediaList;
  }

  getEncyclopediaById(id: number): Encyclopedia | undefined {
    return this.encyclopediaList.find(encyclopedia => + encyclopedia.id === id);
  }

  constructor() { }
}

3.新しいサービスからデータを取得します。

3-1.app.component.ts にサービス関数をインポートします。
- import { Component } from '@angular/core';
+ import { Component, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';
import { HeaderComponent } from './header/header.component';
import { MainComponent } from './main/main.component';
import { Encyclopedia } from './encyclopedia';
+ import { EncyclopediaService } from './encyclopedia.service';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterOutlet, HeaderComponent, MainComponent, CommonModule],
  template: `
  <main>
    <app-header></app-header>
    <app-main
      *ngFor="let encyclopedia of encyclopediaList"
      [encyclopedia]="encyclopedia">
    </app-main>
  </main>
`
})
export class AppComponent {
-  encyclopediaList: Encyclopedia[] = [
-    {
-      id: 1,
-      name: 'Test Name 001'
-    },
-    {
-      id: 2,
-      name: 'Test Name 002'
-    }
-  ];
+  encyclopediaList: Encyclopedia[] = [];
+  encyclopediaService: EncyclopediaService = inject(EncyclopediaService);
+
+  constructor() {
+    this.encyclopediaList = this.encyclopediaService.getAllEncyclopedias();
+  }

(アウトプット)
3-1.PNG

無事に思った通りになりました。

1
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
1
0