ウェブサイト検索

TypeScript - AngularJs 2 における AppComponent と @Component の関係は何ですか?


例としての app.component.ts ファイル : https://angular.io/resources/live-examples/toh-1/ts/plnkr.html は以下の通りです :

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

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

@Component({
  selector: 'my-app',
  template:`
    <h1>{{title}}</h1>
    <h2>{{hero.name}} details!</h2>
    <div><label>id: </label>{{hero.id}}</div>
    <div>
      <label>name: </label>
      <input [(ngModel)]="hero.name" placeholder="name">
    </div>
    `
})
export class AppComponent {
  title = 'Tour of Heroes';
  hero: Hero = {
    id: 1,
    name: 'Windstorm'
  };
}

さて、AppComponentでtitleの値を設定し、それが@Componentのテンプレートに表示されます。では、これがどのように可能なのか知りたいですか?

回答 #1

`@Component()` はデコレーターであり、デコレーターの直後に続くクラス、メンバー、または変数に適用されます。そのため、`@Component()` デコレーターが `class AppComponent()` の直前にあるので、このクラスに適用されます。

template: ''...'' 内の式は、それが適用されるクラスのスコープ内で評価されます。したがって、title は AppComponent 内の title フィールドを指します。

回答 #2

ギュンターが言ったように、それはデコレーターです。さらに、デコレーターは Reflect.defineMetadata を使用して、関連するクラスに Reflect Metadata ライブラリでいくつかのメタデータを自動的に設定するという追加の機能があります。そのメタデータは、デコレーターのパラメータ(ComponentMetadata 型)として設定したものに対応します。

コンポーネントが使用されると、Angular2 はそのような注釈を探して、コンポーネントの使用方法や設定方法を見つけ出します。

関連記事