加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

角度构造函数参数@optional vs问号用法

发布时间:2020-12-17 17:03:33 所属栏目:安全 来源:网络整理
导读:Angular2我可以同时使用@optional或?表示构造函数中的可选参数.我尝试了两者,它看起来很相似. 他们之间有什么区别? 解决方法 @Optional将依赖项标记为可选,因此即使未定义依赖项的服务提供程序,注入器也不会引发异常. ?是一个Typescript符号,它将函数参数
Angular2我可以同时使用@optional或?表示构造函数中的可选参数.我尝试了两者,它看起来很相似.
他们之间有什么区别?

解决方法

@Optional将依赖项标记为可选,因此即使未定义依赖项的服务提供程序,注入器也不会引发异常.

?是一个Typescript符号,它将函数参数标记为可选,因此它的目的与@Optional不同.

如果使用?代替@Optional,Injector仍将尝试解决依赖关系,如果不能,则会引发异常.

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); 
  }
}

如果未定义Engine服务,这将引发异常

EXCEPTION: No provider for Engine! (ChildDirective -> Engine)

这是plunk链接.
https://embed.plnkr.co/jEZISqAksYWdaaBTFGd0/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读