この質問には既に回答があります:
私はフレームワークにおけるこれらの2つの概念の違いを理解するのに苦労してきました。
私はAngularJS 1.xのディレクティブが何であるかよく知っていて、Angular 2のコンポーネントとディレクティブはこのコンセプトと非常によく似ています...
任意のコンポーネントをビュー付きのディレクティブと考えることができます。
コンポーネントだけにビューがあるという事実に基づいて、いくつかの結果があります。たとえば、次のようになります。
directives
コンポーネント自体で使用され、サブツリー全体がルートになっています。pipes
コンポーネントとそれがルートになっているサブツリー全体で使用されます。viewEncapsulation
ディレクティブとは対照的に、ビューを持つことができるためですElementInjector
指定されたコンポーネントの場合は、Host
インジェクタ。角度2でコンポーネントを定義する古典的な方法は次のとおりです。
@Component({
selector: '...',
// ...
})
@View({
template: '...'
})
class ComponentCtrl {...}
ザ@View
デコレータは、指定されたコンポーネントのビューを定義するのに役立ちます。 Angularチームは、単一のコンポーネントが複数のビュー定義(コンポーネントが動作する各プラットフォームごとに1つ)を持つことを許可する予定であるため、当初は別のデコレータで外部化されていました(上の例と同様)。
最近、このデコレータが削除されたので、現在では以下のコンポーネントを定義できます:
@Component({
selector: '...',
template: '...',
//...
})
class ComponentCtrl {...}
このようにして、同じ結果が得られますが、タイピングは少し少なくなります。内部的に角度2は、あなたが設定したプロパティに基づいて適切なビューメタデータを追加します@Component
デコレータ。