【发布时间】:2021-09-12 13:10:52
【问题描述】:
我正在尝试创建一个可重用的模块。在该模块中,我想使用 MatDialog 打开不同的组件。让我们调用组件StartActionComponent。通常,我可以使用:
export class StartActionComponent{
async startbuttonClicked(e: SomeEvent){
const dialogRef = this.dialog.open( SomeModalComponent , {data: e});
}
}
这很好用,但我想动态注入一个组件,比如说SomeModalComponent2。我正在尝试实现以下目标:
仪表板模块
export const START_COMPONENT = new InjectionToken<any>('START_COM');
export class DashboardModule {
static forRoot(conf: {
onStart: any
}):ModuleWithProviders<DashboardModule>{
return {
ngModule: DashboardModule,
providers: [
{
provide: START_COMPONENT, useValue: conf.onStart
}
]
}
}
}
在StartActionComponent 组件中。
StartActionComponent
constructor(
@Inject(STOP_COMPONENT) startComponent: any) {}
async startbuttonClicked(e: SomeEvent){
const dialogRef = this.dialog.open( this.startComponent , {data: e});
}
还有app.module.ts
AppModule
import { SomeModalComponent2 } from 'some.modal2.component`;
@NgModule({
import: [DashboardModule.forRoot(onStart: SomeModalComponent2)]
})
我想删除 any 并有一个类型:
static forRoot(conf: {onStart: any})
或
@Inject(STOP_COMPONENT) startComponent: any) {}
我尝试了 ComponentType 但没有运气
【问题讨论】:
-
请问,有一个模块和组件弹出 mat 对话框比直接引用其他模块中的 mat 对话框有什么价值?这为您解决了什么问题?可以有一个弹出垫子对话框的单例服务来代替这个吗?
标签: angular typescript angular-material