Jan*_*ier 5 typescript angular
Angular2我可以同时使用@optional或?表示构造函数中的可选参数.我尝试了两者,它看起来很相似.他们之间有什么区别?
小智 7
@Optional将依赖项标记为可选,因此即使未定义依赖项的服务提供程序,注入器也不会引发异常.
?是一个Typescript符号,它将函数参数标记为可选,因此它的目的不同于@Optional.
如果你使用?代替@Optional注射器仍然会尽力解决的依赖,如果不能将引发异常.
class Engine {}
@Directive({
selector: 'child-directive'
})
class ChildDirective {
constructor(@Optional() @Host() os:OtherService, @Optional() @Host() hs:HostService, public engine?: Engine){
console.log("os is null", os);
console.log("hs is NOT null", hs);
console.log(this.engine);
}
}
Run Code Online (Sandbox Code Playgroud)
如果未定义Engine服务,这将引发异常
EXCEPTION: No provider for Engine! (ChildDirective -> Engine)
Run Code Online (Sandbox Code Playgroud)
这是plunk链接. https://embed.plnkr.co/jEZISqAksYWdaaBTFGd0/
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |