app.module.ts
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useFactory: loggerProviderFunc(1),
}]
})
app.component.ts
@Component({
selector: 'my-app',
styleUrls: ['./app.component.scss'],
templateUrl: './app.component.html',
})
export class AppComponent {
constructor(private c:Logger){
}
}
logger.ts
export class Logger {
constructor(private msg: string) {
console.log(this.msg);
}
}
错误:ERROR类型错误:工厂不是函数 在_callFactory
我在控制台中将传递的值设为1,但紧接其后我也收到错误。但是,如果我只是删除参数,即将loggerProviderFunc(1)
更改为loggerProviderFunc
答案 0 :(得分:1)
provideFactory:
字段需要一个函数,而不是调用该函数的结果。
如果希望将其与参数一起使用,则可以使用箭头表达式:
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useFactory: () = > loggerProviderFunc(1),
}]
})
也许Angular还允许调用useValue:
的函数,但这未经测试。如果可行,请注意,它将仅被调用一次,而工厂方法在每次解析程序完成其解析工作时都会被调用。
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useValue: loggerProviderFunc(1)
}]
})