我知道如果我有类似product.id == 1的东西吗?东西:不是东西。这意味着如果id = 1,则选择“填充”。如果不是,则选择“不是东西”。以下是什么意思:
product?.id.name
答案 0 :(得分:13)
从字面上看,这意味着:
((product == null) ? null: product.id.name)
因此,如果product
为null,则返回null
,否则返回整个值。
如果我们有:
product?.id?.name
那么我们应该期待像这样的东西:
((product == null) ? null: ((product.id == null) ? null: product.id.name))
如果您有疑问,则可以随时检查角度编译器后的外观:
有关更多详细信息,请参阅文档:
答案 1 :(得分:11)
?
表示安全 navigation operator
来自 Docs
Angular安全导航操作符(?。)流畅且方便 防止属性路径中的空值和未定义值的方法。这里 是的,如果currentHero为 空。
这特别意味着,如果您绑定到视图的值为null,则它应该返回null,否则返回实际值,这样在渲染模板时不会出现任何问题。
在您提供的上述示例代码中,
product?.id.name
它检查生产对象是否存在,然后将检查是否有一个id。
因为您在id后没有 ?
。 it will throw an error "cannot read property of 'name' undefined".
答案 2 :(得分:3)
product && product.id.name
的语法糖只是
答案 3 :(得分:1)
角度安全导航运算符(?。)防止导航抛出null或未定义的组件属性
让我们假设您的组件中有一个名为AutoMapper
的属性,它是cfg.CreateMap<ObjectB, ObjectA>()
.ForMember(dest => dest.PropertyA, m => m.Condition(source => source.PropertyA != "SomeValue"))
.ForMember(dest => dest.PropertyB, m => m.Condition(source => source.PropertyA != "SomeVAlue" ? source.PropertyB : ignore))
或person
null