Angular 2 - 基类包含子类模板

Posted

技术标签:

【中文标题】Angular 2 - 基类包含子类模板【英文标题】:Angular 2 - base class incorporates child class template 【发布时间】:2017-08-21 12:46:32 【问题描述】:

我尝试为基类定义一个弹出窗口(带有边框、标题和关闭按钮),并且窗口内部应在子类和模板中定义

我阅读了很多继承教程,但每次子类都会覆盖基类模板而不是在其中注入

我应该使用继承吗?聚合?指令?在这种情况下,我可以将组件类作为指令的参数传递吗?

基类:

import  Component, OnInit  from '@angular/core';

@Component(
    selector: 'my-popup-window',
    templateUrl: './popupWindow.component.html',
    styleUrls: ['./popupWindow.component.css'],
)

export class PopupWindow implements OnInit 

    constructor(
    )  

    ngOnInit() 

    


基本模板:

<div class="popupWindowMainDiv">
    <!-- here should be injected child class stuffs -->
</div>

子类:

import  PopupWindow  from '../popupWindow/popupWindow.component';

export class ProductSelectorComponent extends PopupWindow implements OnInit 

谢谢

【问题讨论】:

【参考方案1】:

当你在 typescript/angular 中扩展类时,只有内部结构和元被继承。无法继承类注释 (@Component)。所以当你扩展指令时,你必须完全覆盖@Component注解的所有参数。

@Component(
    selector: 'my-another-popup-window',
    templateUrl: './popupWindow.component.html',
    styleUrls: ['./popupWindow.component.css'],
)
export class ProductSelectorComponent extends PopupWindow implements OnInit 

在你的特殊情况下,你应该有类似的东西:

//popupWindow.component.html
<div class="header"><ng-content select="[header]"></ng-contents></div>
<div class="body"><ng-content select="[body]"></ng-contents></div>
<div class="footer"><ng-content select="[footer]"></ng-contents></div>

@Component(
    selector: 'my-another-popup-window',
    templateUrl: `
        <my-popup-window>
            <div header><h1>My Header</h1></div>
            <div body><!-- some content --></div>
        </my-popup-window>
    `,
    styleUrls: ['./popupWindow.component.css'],
)
export class ProductSelectorComponent

【讨论】:

它有效!感谢您花时间制作 plunkr ;-)

以上是关于Angular 2 - 基类包含子类模板的主要内容,如果未能解决你的问题,请参考以下文章

tp5.1 在子类控制器中获取父类渲染到模板的变量

基类的函数指针指向子类的成员函数?

C++ 模板继承。子类应该用固定类型替换基类中的类型

模板模式

包含指向派生模板类的基类指针的类的赋值运算符和复制构造函数

Item 43:访问模板基类中的名称 Effective C++笔记