首页 > 解决方案 > 将参数传递给 useFactory()

问题描述

练习 DI 和 Factory 方法,我想将一些参数传递给 Factory。所以我写了这样的东西:

const loggingImplementation: AnalyticsImplementation = {
  recordEvent: (metric: Metric): void => {
    console.log('The metric is:', metric);
    console.log('Sending to', destUrl);
  }
};

export function loggerFactory(http: HttpClient, destUrl: string): AnalyticsService {
  return new AnalyticsService(loggingImplementation);
}

@NgModule({
  imports: [CommonModule, HttpClientModule],
  providers: [
    {provide: 'API_URL', useValue: 'http://nsa.gov'},
    { provide: AnalyticsService, deps: [HttpClient, 'API_URL'], useFactory(http: HttpClient, destUrl: string): loggerFactory}
  ],
  declarations: [ ]
})

export class AnalyticsDemoModule1 {
}

但是 Angular 给了我一个错误,说后面缺少分号,loggerFactory所以我认为我没有使用正确的语法。你能帮我告诉我我做错了什么吗?

标签: angular

解决方案


不需要(http: HttpClient, destUrl: string)

useFactory: loggerFactory

如果你想注入 aAPI_URL你可以使用一个特殊的符号:

{
  provide: AnalyticsService,
  deps: [ HttpClient, new Inject('API_URL') ],
  useFactory: loggerFactory
}

它应该工作。您定义的任何内容deps都将传递给工厂参数


推荐阅读