这是我想要做的:
@Injectable()
export class MyInjectableClass {
constructor(timeout: number = 50) {
}
}
我想要实现的是timeout
在注入时被设置为0,但是当它被手动构造时,调用代码可以设置它想要的任何值。
这不起作用,因为注射器无法注入数字"并且没有意识到它可以使用默认值。这也不起作用:
@Injectable()
class MyInjectableClass {
constructor(@Optional() timeout: number = 50) {
}
}
因为原因,这不起作用。
工作是什么
export class MyInjectableClassOptions {
timeout: number,
}
@Injectable()
export class MyInjectableClass {
constructor(@Optional() options?: MyInjectableClassOptions) {
const timeout = options? options.timeout : 50;
}
}
但男人,那是丑陋而精致的。告诉我还有另一种可能性。
答案 0 :(得分:1)
您可以使用InjectionToken注入简单值。
像
这样的东西export const MY_OPTION = new InjectionToken<number>('my-option');
然后在你的模块中
providers: {provide: MY_OPTION, useValue: 50}
最后在你的服务中
constructor(@Inject(MY_OPTION) option: number) {}
对于默认选项,您可以将@Optional属性与@Inject
结合使用