Javascript 为什么赢了';t允许我将参数传递给提供程序中的函数';什么是旧工厂?
应用程序模块.tsJavascript 为什么赢了';t允许我将参数传递给提供程序中的函数';什么是旧工厂?,javascript,angular,typescript,dependency-injection,angular5,Javascript,Angular,Typescript,Dependency Injection,Angular5,应用程序模块.ts bootstrap: [AppComponent], declarations: [AppComponent], imports: [ CoreModule, HelloFrameworkModule, ], providers: [{ provide: Logger, useFactory: loggerProviderFunc(1), }]
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useFactory: loggerProviderFunc(1),
}]
})
@Component({
selector: 'my-app',
styleUrls: ['./app.component.scss'],
templateUrl: './app.component.html',
})
export class AppComponent {
constructor(private c:Logger){
}
}
export class Logger {
constructor(private msg: string) {
console.log(this.msg);
}
}
应用程序组件.ts
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useFactory: loggerProviderFunc(1),
}]
})
@Component({
selector: 'my-app',
styleUrls: ['./app.component.scss'],
templateUrl: './app.component.html',
})
export class AppComponent {
constructor(private c:Logger){
}
}
export class Logger {
constructor(private msg: string) {
console.log(this.msg);
}
}
logger.ts
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useFactory: loggerProviderFunc(1),
}]
})
@Component({
selector: 'my-app',
styleUrls: ['./app.component.scss'],
templateUrl: './app.component.html',
})
export class AppComponent {
constructor(private c:Logger){
}
}
export class Logger {
constructor(private msg: string) {
console.log(this.msg);
}
}
错误:错误类型错误:工厂不是函数
在callFactory
我在控制台中得到1作为传递的值,但在它之后我也得到了错误。但是,如果只删除参数,即将
loggerProviderFunc(1)
更改为loggerProviderFunc
,providerfactory:
字段需要函数,而不是调用函数的结果,则控制台中不会出现任何错误
如果希望将其用于参数,可以使用箭头表达式:
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useFactory: () = > loggerProviderFunc(1),
}]
})
也许Angular还允许调用useValue:
的函数,但这一点我还没有测试过。如果这样做有效,请注意,它将只被调用一次,而解析程序每次执行解析工作时都会调用factory方法
bootstrap: [AppComponent],
declarations: [AppComponent],
imports: [
CoreModule,
HelloFrameworkModule,
],
providers: [{
provide: Logger,
useValue: loggerProviderFunc(1)
}]
})
如果这样做有效,请注意它只会被调用一次,而每次解析程序执行解析工作时都会调用factory方法。
这是有用的信息。非常感谢,我现在明白了。顺便说一句,useValue确实有效。我已经试过了。@SamuraiJack不客气,谢谢你对useValue
的反馈。