我正在尝试根据条件更新 useClass 。当我尝试更改选项卡时,我想更新服务。所以我为此编写了一个工厂函数。
let useClassFactory = (
conn: service1,
svc: service2,
object: any
) => {
let path = typeof object == 'string' ? object : object?.path
if (path === 'connections') {
return conn
} else if (path === 'services') {
return svc
} else {
return conn
}
}
@Component({
selector: 'cmpnt-form',
templateUrl: './cmpnt-form.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
{
provide: QPService,
// useClass: SvcService,
useFactory: useClassFactory,
deps: [ConnService, SvcService]
},
{
provide: TableService,
useClass: TableService,
deps: [QPService]
}
]
})
onTabClick(path: any) {
useClassFactory(this.ConnService, this.svcService, path)
this.getColumns(path).subscribe({
next: (data: ModelAsTableColumns[]) => {
this.columns = data
this.dataSource = []
},
error: (err) => {}
})
}
工厂功能正在工作并根据路径返回正确的服务。但是当我使用 API 时,它只会使用默认服务。出厂功能后我需要更新什么吗?
我尝试根据选项卡单击使用 useClass 内的不同服务。但它使用的是相同的 API。
为什么需要一个工厂,一个简单的 getter 方法就足够了,对吗?
get conditionalService() {
return this.path === 'connections' ? this.ConnService : this.svcService;
}