Angulra2 View建立 with VS2015 - Step5. Services

Angulra2 View建立 with VS2015 - Step5. Services

 

可注入的服務

在 app 資料夾下建立 hero.service.ts 檔案,將它命名為 HeroService 並且 export 讓組件都可以使用。

我們注入了 Angular 的 Injectable 方法,並使用 @Injectable() 裝飾器來使用這個方法。

當 TypeScript 看到 @Injectable() 裝飾器時,會自動記錄此服務的中繼資料(metadata)。如果 Angular 需要這個服務注入到其他地方,就會使用這些中繼資料。

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

@Injectable()
export class HeroService {
}
@Injectable() 注意加上小括號,以免執行出錯會無法判斷。

取得英雄列表(原始資料)

hero.service.ts 中增加一個 getHeroes 方法。

使用者並不知道此服務是如何取回原始資料的。 HeroService 可以從任何地方取回資料,可以從 Web Service 或者 SQL 取回。

@Injectable()
export class HeroService {
  getHeroes() {
  }
}

接著在 app 資料夾底下新增一個 mock-heroes.ts 的檔案,從 app.component.ts 中把資料複製過來。

要注意的是,由於使用了 Hero Class ,所以要記得 import  Hero Class

import { Hero } from './hero';
export var HEROES: Hero[] = [
  {id: 11, name: 'Mr. Nice'},
  {id: 12, name: 'Narco'},
  {id: 13, name: 'Bombasto'},
  {id: 14, name: 'Celeritas'},
  {id: 15, name: 'Magneta'},
  {id: 16, name: 'RubberMan'},
  {id: 17, name: 'Dynama'},
  {id: 18, name: 'Dr IQ'},
  {id: 19, name: 'Magma'},
  {id: 20, name: 'Tornado'}
];

回傳原始資料

回到 HeroService ,我們引用 HEROES 並回傳。

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

import { HEROES } from './mock-heroes';

@Injectable()
export class HeroService {
  getHeroes() {
    return HEROES;
  }
}

使用 HeroService 服務

在 AppComponent 中導入 HeroService。

import { HeroService } from './hero.service';

導入之後要如何使用呢?一般來說會使用 new 關鍵字來建立 HeroService,但Angular2 並不建議這麼做。

heroService = new HeroService(); // don't do this

注入 HeroService