将数据呈现到来自api的模板上时,我注意到如果数据位于嵌套对象/数组中,则必须使用问号。
即:
approveBooking?.cabBooking?.bookingId
而不只是:
approveBooking.cabBooking.bookingId
这是解决此问题的正确方法吗?使用打字稿接口是否可以避免使用“?”因为您是在预先告诉应用程序什么嵌套对象/数组在其中?
答案 0 :(得分:1)
实际上是为什么?用来保留仅在可用时显示的数据。
让我们以您正在从api请求中从JSON对象中提取此数据为例,而不使用?加载变量时会显示错误,因为页面会立即加载并在api服务延迟时将值呈现为Null,但是“?”运算符允许数据在显示之前可用。
那么,您的情况
approveBooking?.cabBooking?.bookingId
这告诉应用程序
我希望这能回答。
答案 1 :(得分:1)
Angular中的Angular安全导航运算符(?。)是一种流畅而便捷的方法,可防止属性路径中的null和undefined值
?
是安全的导航运算符,它只是避免了模板数据绑定中的虚假和空值检查。
当然,您可以对打字稿接口进行相同的操作,但这是检查脆弱和空值检查的快捷方式。
答案 2 :(得分:1)
有两种安全导航方式-
1)使用?
:,就像您已经做过的事情-
approveBooking?.cabBooking?.bookingId
2)使用['']:您还可以将安全遍历用作-
approveBooking['cabBooking']['bookingId']
答案 3 :(得分:1)
”?作为三元运算符。仅适用于角度模板引擎,不是打字稿或javascript功能。
例如:假设在您的api调用中,响应对象具有几个字段,这些字段并不总是存在,我的意思是每当您调用该API时。
第一种情况:
response = {
uname: 'xyz',
country: {
iso: 'IN',
name: 'India',
...
},
ssn: 2839483
}
第二种情况:
response = {
uname: 'abc',
ssn: 8765678
}
您要在模板中使用条件*ngIf
通过iso值检查是否来自特定国家/地区的用户,以便您可以为其显示一个标志。
现在,对于第一种情况,当您使用此response.country.iso
时,它将在控制台中显示错误,提示找不到未定义的iso。为了在动态模板中安全地处理此问题,您需要编写response.country?.iso
请注意,我仅对国家/地区字段使用'?
'运算符,因为我知道此字段仅在我的API响应数据中是变量。