Angular 2 Quickstartチュートリアルのmultiple compenentsセクションでは、コンポーネントを以前のAppComponentから抽出して、再利用性とテストしやすさを向上させています。Angular 2 Quickstartでは、HeroDetailComponentクラスの@Input文の目的は何ですか?
live exampleを実行してください。
ユーザはHeroes
のリストをクリックすることができ、詳細ビューがリストの下に表示されます。
成分:
- AppComponent(英雄のリスト)
- HeroDetailComponent(表示詳細主人公が選択されると)
ヒーロークラスをインポート両方とも:
export class Hero {
id: number;
name: string;
}
AppComponentのテンプレートではhero
が対象となりますoperty:
<my-hero-detail [hero]="selectedHero"></my-hero-detail>
selectedHero
ソースプロパティがリストされてヒーローに一度ユーザーがクリックする設定されています。
これまでのところ、とても良いです。
が今、問題は、私はHeroDetailComponent
クラスで@Input
の目的を理解していないよということです。
export class HeroDetailComponent {
@Input()
hero: Hero;
}
@Input()
が省略された場合、hero
プロパティが設定されることはありませんようです。 @Input()
はどこからの不動産を取得するのですか?ディレクティブにターゲットプロパティがあるときに、このステートメントが必須で、自動的に呼び出されるのはなぜですか?
私には明らかではありませんが、私は大きな画像を見逃しているようです。
'@Input() 英雄:ヒーロー、' 'ワンピース 'コード?例えば、あなたは 'ヒーロー:ヒーロー'のようなものの上に '@ Input'を付けずに見たことがありますか? –
確かに、 '[hero] =" ... "'のようなAngular2バインディングを使ってバインドすることはできません。 'hero:Hero'は' HeroDetailComponent'の通常のインスタンスプロパティです。 '@Input()'は、親からの値にバインド可能にします。また、それは '[ヒーロー] =" selectedHero "(heroChange)=" selectedHero = $ event "のように双方向にバインドすることができます。短縮形 '[(hero)] =" selectedHero "' –