2016-04-10 5 views
0

私は角度js2の新人です。チュートリアルを試して、試してみましたが、下の1つの問題に固執しました。誰がこれを知っているだろうか?インポートされたコンポーネントを使用する際の質問

以下は私のコード

app.component.ts

import {Component} from 'angular2/core'; 
import {Items} from './test_items'; 

@Component({ 
    selector: 'my-app', 
    template:`   
     <div class="content-wrapper"> 
      <div class="content"> 
       <ul> 
        <li *ngFor="#hero of heroes"> 
         <span>{{hero.id}}</span> {{hero.name}} 
        </li> 
       </ul> 
      </div> 
     </div> 
    ` 
}) 

export class AppComponent { 
    public title = 'Test'; 
} 

test_items.ts

export class Hero { 
    id: number; 
    name: string; 
} 

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" } 
]; 

export class Items { 
    public heroes = HEROES; 
} 

予想通りの英雄のリストが出て表示されませんです。他のコンポーネントからリストを取得することには制限がありますか?

答えて

0
import {Component} from 'angular2/core'; 
import {bootstrap} from 'angular2/platform/browser'; 
import {Items,Hero} from './comp'; 

@Component({ 
    selector: 'app', 
    template:`   
     <div class="content-wrapper"> 
      <div class="content"> 
       <ul> 
        <li *ngFor="#hero of heroes"> 
         <span>{{hero.id}}</span> {{hero.name}} 
        </li> 
       </ul> 
      </div> 
     </div> 
    ` 
}) 

export class AppComponent { 
    public title = 'Test'; 
    heroes:Hero[]; 

    constructor(items:Items) 
    { 
    this.heroes = items.heroes; 
    } 
} 

bootstrap(AppComponent, [Items]); 

これは役に立ちます。

+0

これはありがたいですが、上記の解決策を好むでしょうか? – Ruster

+0

@Ruster上記の解決策では、アイテムを取得するオブジェクトをインスタンス化していますが、私が与えたものは、依存性注入を使用する適切なangular2方法です。 – sreeramu

+0

合意。両方の助けをありがとう。 – Ruster

0

コンポーネントのビューは、コンポーネントのそれとはまったく反復します(heroes)。しかし、そのような配列はまったくありません。コンポーネントが持つ唯一のものはタイトルです。

全く関係のないクラスItemsには、heroesという名前のフィールドがあるということは無関係です。コンポーネントにItemsをインポートしたということもあります。

インポートは、ItemsのすべてのフィールドがAppComponentのフィールドになることを意味するものではありません。コンパイラとランタイムは、コードをコンパイル/実行するときに、Itemsクラスを探す場所を知っているだけです。しかし、AppComponentはクラスItemsを使用していないので、インポートは役に立たない。

+0

ありがとうございます!私も、Items.heroesを使ってみましたが、リストには表示されません。その場合、アイテムコンポーネントからヒーローリストをどのように表示できますか? – Ruster

+0

英雄はインスタンスフィールドであり、静的フィールドではありません。そのヒーローにアクセスするにはインスタンスが必要です: 'let items = new Items(); console.log(items.heroes) 'を実行します。したがって、ビューからアイテムヒーローにアクセスするには、コンポーネントに 'public items = new Items();'インスタンスフィールドを置き、ビューに#hero of items.heroesを使用します。 –

+0

これは機能します!助けてくれてありがとう! – Ruster

関連する問題