你可以覆盖第三方模块的组件声明吗?
假设您正在使用声明并导出两个组件的第三方模块:
@NgModule({
exports: [Cmp1, Cmp2]
declarations: [Cmp1, Cmp2]
})
export class ThirdPartyModule {}
Run Code Online (Sandbox Code Playgroud)
Cmp1
的模板:
`<app-cmp2></app-cmp2>`
Run Code Online (Sandbox Code Playgroud)
Cmp2
的模板:
`<p>foo</p>`
Run Code Online (Sandbox Code Playgroud)
AppModule
进口ThirdPartyModule
:
@NgModule({
...
imports: [ThirdPartyModule],
declarations: [AppComponent]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
AppComponent
的模板就是<app-cmp1></app-cmp1>
.
你将如何重新声明/覆盖的第三方模块的实现Cmp2
,这样不Cmp2
但MyCmp2
在内部呈现Cmp1
?
显然我需要扩展Cmp2(或实现其接口):
@Component({
... // same selector as Cmp2
})
export const MyCmp2 extends Cmp2 {}
Run Code Online (Sandbox Code Playgroud)
我尝试通过DI提供它:{ provide: Cmp2, useClass: MyCmp2 }
这不起作用.
简单地在app模块中声明它也不会起作用,因为当两个组件匹配相同的选择器时,角度会抛出.这甚至可能吗?
我的具体用例是覆盖材质水平步进器的标题组件.
angular ×1