如何扩展/继承Angular2组件? [英] How to Extend/Inherit Angular2 component?

查看:1139
本文介绍了如何扩展/继承Angular2组件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题

我想为已部署在Angular 2中的某些组件创建扩展,而不必像几乎完全重写它们一样,基本组件可能会发生变化,并希望这些变化也反映在其衍生组件中。

I would like to create extensions for some components already deployed in Angular 2, without having to rewrite them almost completely, as the base component could undergo changes and wish these changes were also reflected in its derived components.

示例

我创建了这个简单的示例,试图更好地解释我的问题:

使用以下基本组件 app / base-panel.component.ts

import {Component, Input} from 'angular2/core';

@Component({
    selector: 'base-panel',
    template: '<div class="panel" [style.background-color]="color" (click)="onClick($event)">{{content}}</div>',
    styles: [`
    .panel{
    padding: 50px;
  }
  `]
})
export class BasePanelComponent { 

  @Input() content: string;

  color: string = "red";

  onClick(event){
    console.log("Click color: " + this.color);
  }
}

您是否只想创建另一个衍生组件,例如,在示例颜色的情况下的基本组件行为, app / my-panel.component.ts

Would you like to create another derivative component only alter, for example, a basic component behavior in the case of the example color, app/my-panel.component.ts:

import {Component} from 'angular2/core';
import {BasePanelComponent} from './base-panel.component'

@Component({
    selector: 'my-panel',
    template: '<div class="panel" [style.background-color]="color" (click)="onClick($event)">{{content}}</div>',
    styles: [`
    .panel{
    padding: 50px;
  }
  `]
})
export class MyPanelComponent extends BasePanelComponent{

  constructor() {
    super();
    this.color = "blue";
  }
}

在Plunker中完成工作示例


注意:显然这个例子很简单,可以解决,否则不需要使用继承,但它只是为了说明真正的问题。

Note: Obviously this example is simple and could be solved otherwise no need to use inheritance, but it is intended only to illustrate the real problem.

问题

正如你在衍生组件的实现中看到的那样 app / my-panel.component.ts ,大部分实现都重复了,单个部分真正继承的是 BasePanelComponent ,但 @Component 基本上必须完全重复,而不仅仅是更改的部分,因为选择器:'my-panel'

As you can see in the implementation of the derivative component app/my-panel.component.ts, much of the implementation was repeated, and the single part really inherited was the class BasePanelComponent, but the @Component had to basically be completely repeated, not just the changed portions, as the selector: 'my-panel'.

问题

以某种方式实现字面上的完全继承组件Angular2,继承标记/注释的定义,例如 @Component

To some way to make a literally full inheritance of a component Angular2, inheriting the class definition of the markings/annotations, as for example @Component?

编辑1 - 功能请求


在GitHub上添加到项目的功能请求angular2:扩展/继承angular2组件注释#7968

编辑2 - 已关闭请求


请求已关闭,因此,暂时不知道如何合并装饰器。离开我们没有选择。所以我的观点是在问题中引用

The request was closed, for this reason, that briefly would not know how to merge the decorator will be made. Leaving us with no options. So my opinion is is quoted in the Issue.


推荐答案

Angular 2版本2.3刚刚发布,它包含本机组件继承。看起来你可以继承和覆盖你想要的任何东西,模板和样式除外。一些参考文献:

Angular 2 version 2.3 was just released, and it includes native component inheritance. It looks like you can inherit and override whatever you want, except for templates and styles. Some references:

Angular 2中的组件继承

一个Plunkr演示组件继承

这篇关于如何扩展/继承Angular2组件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆