私はAngularが初めてで、まだ理解しようとしています。私はMicrosoft Virtual Academyのコースを受講しましたが、それは素晴らしかったですが、彼らが言ったことと私のコードの振る舞いの間には少し矛盾が見つかりました!具体的には、次のように「別のコンポーネント内にコンポーネントを配置」しようとしました。
@Component({
selector: 'parent',
directives: [ChildComponent],
template: `
<h1>Parent Component</h1>
<child></child>
`
})
export class ParentComponent{}
@Component({
selector: 'child',
template: `
<h4>Child Component</h4>
`
})
export class ChildComponent{}
これは彼らがコースで作成するのと同じ例ですが、私のコードでは機能しません!特にVisualStudioは、「ディレクティブ」プロパティがコンポーネントデコレータに存在しないと言っています。どうすれば解決できますか?
入れないdirectives
のコンポーネント
register@NgModule
宣言で:
@NgModule({
imports: [ BrowserModule ],
declarations: [ App , MyChildComponent ],
bootstrap: [ App ]
})
そして、あなたは次のように親のテンプレートHTMLにそれを置くだけです:<my-child></my-child>
それでおしまい。
あなたのAngular-2バージョンのディレクティブはコンポーネントデコレータではサポートされていないので、register directive@ NgModuleの他のコンポーネントと同じにし、以下のようにコンポーネントにインポートする必要がありますまた、directives: [ChildComponent]
をデコレータから削除します。
import {myDirective} from './myDirective';
ディレクティブ属性を削除すると、機能するはずです。
@Component({
selector: 'parent',
template: `
<h1>Parent Component</h1>
<child></child>
`
})
export class ParentComponent{}
@Component({
selector: 'child',
template: `
<h4>Child Component</h4>
`
})
export class ChildComponent{}
ディレクティブはコンポーネントに似ていますが、属性で使用されます。また、宣言子@Directive
もあります。ディレクティブの詳細については、 構造ディレクティブ および 属性ディレクティブ を参照してください。
他の2種類のAngularディレクティブがあり、他の場所で詳細に説明されています:(1)コンポーネントと(2)属性ディレクティブ。
コンポーネントは、ネイティブHTML要素の方法でHTMLの領域を管理します。技術的には、テンプレートを使用したディレクティブです。
また、用語集を開いている場合、コンポーネントもディレクティブであることがわかります。
ディレクティブ 次のカテゴリのいずれかに分類されます。
コンポーネントにテンプレートがあるという違い。 Angular Architecture 概要を参照してください。
ディレクティブは、
@Directive
デコレータを持つクラスです。コンポーネントはテンプレート付きディレクティブです。@Component
デコレータは、実際にはテンプレート指向の機能で拡張された@Directive
デコレータです。
@Component
メタデータにはdirectives
属性がありません。 Component decorator を参照してください。