angular [FR]不使用模板使组件成为可子类

0sgqnhkj  于 2022-10-29  发布在  Angular
关注(0)|答案(2)|浏览(192)

哪些@angular/* 包与功能请求相关?

核心

描述

Angular最近增加了对组件子类化的支持。因此,现在一个下游应用程序可以覆盖一个库中组件的基本实现。根据我读到的文档,你所要做的就是声明相同的selector。不幸的是,子类需要templatetemplateUrl--如果没有它,我会得到这个错误:

error NG2001: component is missing a template

我的应用程序代码无法访问库的模板文件(通过templateUrl声明),恕我直言,如果我不想替换它(但继承了它在超级组件中的方式),我不应该被迫重新声明模板。
component-class包含UI逻辑。它应该很容易让downstream-lib/-app自定义此逻辑,即覆盖protected/public方法,而不涉及UI(即不重新声明模板)。

建议的解决方案

使@Component(...)注解的templatetemplateUrl对于组件子类是可选的。组件子类应该能够很容易地覆盖UI逻辑,而不需要提供自己的模板。

考虑的替代方案

我们试图将UI逻辑从组件中提取到一个有状态的服务中,该服务与其组件是一对一关联的。然而,这也不起作用--因此,我打开了另一个特性请求:#47899的最大值

vqlkdk9b

vqlkdk9b1#

我终于找到了时间来测试覆盖一个组件(之前我只是读到它)。我认为它会这样工作:

上游库

组件
@Component({
  selector: 'my-component',
  template: '<br>aaaaaaaaaaaaaaaaaaaaaaa<br>'
})
export class MyComponent {
  ...

模块

@NgModule({
  declarations: [MyComponent],
  exports: [MyComponent]
})
export class MyLibModule {}

下游库/应用程序

组件
@Component({
  selector: 'my-component',
  template: '<br>bbbbbbbbbbbbbbbbbbbbbbb<br>'
})
export class ExtComponent extends MyComponent {
  ...

模块

@NgModule({
  declarations: [ExtComponent],
  exports: [ExtComponent],
  imports: [MyLibModule]
})
export class MyAppModule {}

不工作😢

我仍然看到“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
如果还不支持,我在此扩展我的feature-request😏在downstream-lib(或-app)中应该可以通过声明相同的选择器来替换upstream-component。最下游的声明应该获胜--就像服务提供者的声明一样。

qncylg1j

qncylg1j2#

此功能请求现在是我们积压工作的候选项!在下一阶段,社区有60天的时间进行赞成票投票。如果该请求收到的赞成票超过20票,我们将把它移到考虑列表中。
您可以在我们的文档中找到有关功能请求过程的更多详细信息。

相关问题