2016-07-14 3 views
2

私のすべてのリストに必要ないくつかの機能を含む汎用リストコンポーネントを作成したいと思います。理想的には、異なるデータセットをレンダリングするために、コンポーネントへの入力としてさまざまなサービスを使用したいと考えています。これは角度2で可能ですか?サービスは約束を返しgetItems()という名前のいくつかの機能を有していればこれが可能である場合は、角2つのドキュメントAngular2の入力としてサービスを渡す

@Component({ 
    selector: 'Generic List', 
    template: 
    ` 
    <h2>Items</h2> 
    <ul class="items"> 
     <li *ngFor="let item of items" 
      [class.selected]="isSelected(item)" 
      (click)="onSelect(item)"> 
     <span class="badge">{{item.id}}</span> {{item.name}} 
     </li> 
    </ul> 
    ` 
}) 
export class GTComponent { 
    @Input() someService: Service; 

    items: Item[]; 
    private selectedId: number; 

    isSelected(item: Item) { return item.id === this.selectedId; } 

    onSelect(item: Item) { 
    } 
} 

から例をModfying

は、どのように私は、サービスからのデータを持つアイテムの配列を移入します。

答えて

0

基本的に、Angular2コンポーネントにインポートしたサービスについて伝える必要があります。 providers配列を@Componentデコレータに渡すことでそうすることができます。

このコードの例を見て:

import {ListService} from '../services/list.service'; 

@Component({ 
    selector: 'Generic List', 
    template: 
    ` 
    <h2>Items</h2> 
    <ul class="items"> 
     <li *ngFor="let item of items" 
      [class.selected]="isSelected(item)" 
      (click)="onSelect(item)"> 
     <span class="badge">{{item.id}}</span> {{item.name}} 
     </li> 
    </ul> 
    `; 
    providers: [ListService] 
}) 
export class GTComponent { 
    constructor(private _listService = ListService){ 
     this._listService.getItems() 
      .then() 
      .catch() 
    } 
    @Input() someService: Service; 

    items: Item[]; 
    private selectedId: number; 

    isSelected(item: Item) { return item.id === this.selectedId; } 

    onSelect(item: Item) { 
    } 
} 
+0

はい、これは私が '項目[]'を埋めるために入力として渡されたサービスを利用することはできません。その意図は、コンポーネントが提供されるサービスを知らないことです。 – JME

+0

私は同様のシナリオを持っています。入力としてサービスを渡して直接使用することは可能ですか? –

関連する問題