如何根据Angular中的条件更新provider中的useClass

问题描述 投票:0回答:1

我正在尝试根据条件更新 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。

angular dependency-injection service factory angular-factory
1个回答
0
投票

为什么需要一个工厂,一个简单的 getter 方法就足够了,对吗?

get conditionalService() {
    return this.path === 'connections' ? this.ConnService : this.svcService;
}
© www.soinside.com 2019 - 2024. All rights reserved.