11

この質問には既に回答があります:

私はフレームワークにおけるこれらの2つの概念の違いを理解するのに苦労してきました。

私はAngularJS 1.xのディレクティブが何であるかよく知っていて、Angular 2のコンポーネントとディレクティブはこのコンセプトと非常によく似ています...


1 답변


18

任意のコンポーネントをビュー付きのディレクティブと考えることができます。

結果

コンポーネントだけにビューがあるという事実に基づいて、いくつかの結果があります。たとえば、次のようになります。

  • コンポーネントだけが定義できるdirectivesコンポーネント自体で使用され、サブツリー全体がルートになっています。
  • コンポーネントだけが定義できるpipesコンポーネントとそれがルートになっているサブツリー全体で使用されます。
  • 定義できるのはコンポーネントだけですviewEncapsulationディレクティブとは対照的に、ビューを持つことができるためです
  • フレームワークがElementInjector指定されたコンポーネントの場合は、Hostインジェクタ。
  • 変更検出器の別のインスタンスはコンポーネントに対してのみ作成されます(コンポーネントは変更検出戦略を定義できます)。

詳細

角度2でコンポーネントを定義する古典的な方法は次のとおりです。

@Component({
  selector: '...',
  // ...
})
@View({
  template: '...'
})
class ComponentCtrl {...}

@Viewデコレータは、指定されたコンポーネントのビューを定義するのに役立ちます。 Angularチームは、単一のコンポーネントが複数のビュー定義(コンポーネントが動作する各プラットフォームごとに1つ)を持つことを許可する予定であるため、当初は別のデコレータで外部化されていました(上の例と同様)。 最近、このデコレータが削除されたので、現在では以下のコンポーネントを定義できます:

@Component({
  selector: '...',
  template: '...',
  //...
})
class ComponentCtrl {...}

このようにして、同じ結果が得られますが、タイピングは少し少なくなります。内部的に角度2は、あなたが設定したプロパティに基づいて適切なビューメタデータを追加します@Componentデコレータ。

リンクされた質問


関連する質問

最近の質問