親のテンプレートを、Angularのコンポーネントの継承を使用して継承したいとします。Angular2での親コンポーネントのテンプレートの使用
イントロ
私はいくつかの基本的な構成要素を持っており、このコンポーネント(Child1Component
とChild2Component
)のいくつかのチャイルズ(のはそれParentComponent
を呼びましょう)。私はParentComponent
にデフォルトの動作を入れて、子供のコンポーネントでこの動作をセットアップ/拡張するだけです。 ParentComponent
テンプレートにはすでに必要なものがすべて含まれているので、子供のコンポーネントでこのテンプレートをデフォルトで使用するようにします。
実装の第1の変形(動作しない、Error: No template specified for component Child1Component
):
@Component({
selector: 'app-parent',
templateUrl: './app-parent.component.html',
styleUrls: ['./app-parent.component.scss']
})
export class ParentComponent {
}
@Component({
selector: 'app-child1'
})
export class Child1Component extends ParentComponent {
}
@Component({
selector: 'app-child2'
})
export class Child2Component extends ParentComponent {
}
私は親のテンプレートに子供のtemplateUrl
とstyleUrls
を設定できることがわかったが、それは動作します子のViewEncapsulation
がNone
に設定されている場合のみです。
第二の変形(それは動作しますが、私はそれを好きではない):
@Component({
selector: 'app-parent',
templateUrl: './app-parent.component.html',
styleUrls: ['./app-parent.component.scss']
})
export class ParentComponent {
}
@Component({
selector: 'app-child1',
templateUrl: '../parent/app-parent.component.html',
styleUrls: ['../parent/app-parent.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class Child1Component extends ParentComponent {
}
@Component({
selector: 'app-child2',
templateUrl: '../parent/app-parent.component.html',
styleUrls: ['../parent/app-parent.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class Child2Component extends ParentComponent {
}
私は
- 子コンポーネントではありませんビューのカプセル化のこのソリューション原因を好きではありません。
- すべての子コンポーネントのテンプレートとスタイルのURLがコピー・ペーストされます。
あなたは私のこのタスクのためのよりよい解決策を提案してくださいことはできますか?
私は少しアプローチを再考することをお勧めします。あなたが本当にテンプレートを継承したくない場合は、すべての子どもが同じにしたい場合は、テンプレートURLを使用して同じファイルを参照してください。異なる場合は、ng-templateを使用して、異なる部分を切り替えることができます。ここでの継承は、動作を共有する場合にのみ便利です(他の方法もあります)。テンプレートを継承し始めます。おそらく、補完物を別々に分ける必要があることを示しています。 – tam5