typescript - 覆盖/扩展第三方组件的模板

标签 typescript angular

我目前正在导入第三方组件。对于我的用例,我需要重写那个特定的组件模板。

因为这是一个第三方组件,并且是通过 npm 包导入的,所以我不想更改组件,所以我不必在每次更新包时都更新它。

有没有办法覆盖另一个组件的模板?

我知道你可以使用 <ng-content>如果你想注入(inject)一些元素。但是这里是行不通的。

html 是这样的:

<third-party-component [items]="items" [example]="example">

Controller 是这样的:

import {THIRD_PARTY_DIRECTIVES} from 'ng2-select/ng2-select';

@Component({
  selector: 'example-component',
  directives: [THIRD_PARTY_DIRECTIVES]
})
export class Example {

  private items: Array<string> = [
    'whatever', 'whatever2', 'whatever3'
  ];
}

有什么方法可以为 <third-party-component> 指定我想要的模板吗?不编辑那个特定的组件声明?或者甚至只是扩展它?

最佳答案

玩过之后。一个简单的扩展将适用于我的用例。

基本上我创建了一个扩展 thirdPartyClass 的类。

这里发生的是我通过创建自己的选择器并仅导入类来覆盖 thirdPartyClass 的模板。

是这样的:

import {component} from 'angular2/core';
import {thirdPartyClass} from 'example/example';

@Component({
  selector: 'my-selector',
  template: '<div>my template</div>'
})

export class MyOwnComponent extends thirdPartyClass {
  constructor() {
     super()
  }
}

注意事项:

  • 如果您使用此方法,请不要忘记导入 thirdPartyClass 模板中使用的任何管道。
  • 如果功能在依赖于模板的 thirdPartyClass 中更新,您将需要手动更新。
  • 我更喜欢此解决方案而不是引用 ReflectMetaData,因为它是一个简单的扩展,而不是访问注释并强制更改它。

关于typescript - 覆盖/扩展第三方组件的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018592/

相关文章:

reactjs - 如何生成动态 React 标记

angular - 无法读取未定义的 Angular 6 的属性 'nativeElement'

javascript - 从接口(interface)以编程方式创建 Typescript 用户定义的类型保护

angular - 在浏览器上关闭 Angular Material 对话框

angular - 为什么我不能直接设置 Angular Material 步进器元素的样式?

angular - 无法绑定(bind)到 'ngIf',因为它不是 'div' 的已知属性

jquery - 如何在 Aurelia 中导入和使用 RobinHerbots 的 Inputmask

typescript - 从基类 : circular reference 返回子类的新实例

angular - 将参数从模板传递给构造函数

angular - 发布 ASP.NET Core 2 Angular 6 SPA 模板应用程序