是否可以只注入部分构造函数参数?我想实现这样的目标:
@Injectable()
class A {
constructor(param1: string, private param2?: SomeType){}
}
class B extends A {
constructor(){
super("some string value");
}
}
答案 0 :(得分:1)
添加@Optional()
装饰器使其成为可选:
@Injectable()
class A {
constructor(@Optional() param1: string, private param2?: SomeType){}
}
另见https://angular.io/docs/ts/latest/api/core/index/Optional-decorator.html
?
之后的param2
表示您希望此参数是可选的,但您不能拥有基本类型的强制参数(Object
,string
,number
,boolean
)注射剂。
您可以使用@Inject(...)
为提供者使用字符串键,例如:
@Injectable()
class A {
constructor(@Inject('someName')param1: string, @Optional() private param2?: SomeType){}
}
和
providers: [{provide: 'someName', useValue: 'some string value'}]