javascript - 在对象数组中查找 angular 6/typescript/javascript
问题描述
我的 Angular 6 应用程序的 HTML 模板中有以下代码。
<div *ngIf ="conversation.participants[conversation.updatedBy.toLowerCase()].firstName">somedata </div>
基本上我试图通过 updatedBy 值在参与者数组的对象中搜索,看到它的匹配对象的 firstName 属性不为空,但它给了我未定义 firstName 的错误。
我还尝试在 ] 括号后放置问号,如下所示,但没有产生任何结果。
conversation.participants[conversation.updatedBy.toLowerCase()]?.firstName
下面是json对象
"participants": [{
"dateJoin": 1520409578,
"dateLeft": 0,
"firstName": "edh",
"internalId": 165,
"invitedBy": "edh",
"lastName": "edh",
"userId": "edh"
}, {
"dateJoin": 1520409578,
"dateLeft": 0,
"firstName": "",
"internalId": 166,
"invitedBy": "edh",
"lastName": "",
"userId": "ATB"
}],
"dataInAB": "ATB",
"subject": "test ",
"unreadMessageCount": 0,
"updateDate": 1520585258,
"updatedBy": "atb"
}
如果您对此有所了解,请告诉我。
谢谢
解决方案
您需要在您的 component.ts 文件中声明一个变量,该变量将存储您使用的布尔结果*ngIf
。并且在conversation
变量更改时更新值。
例如,在component.ts
let firstNameExists = false;
getConversationData(){
this.conversation = ....
this.firstNameExists = this.conversation.participants.find(m=>m.userId.toLowerCase()==this.conversation.updatedBy).firstName? true: false;
}
然后在你的component.html
<div *ngIf ="firstNameExists">somedata </div>
注意:在 ts 中使用了表达式,因为在角度绑定中使用表达式是一种非常糟糕的做法。
推荐阅读
- python - Matplotlib plt.text(),汉字,重复绘制时画布上的文字会消失
- javascript - 在多维数组Vue中使用数组
- powershell - 如何在PowerShell中重新实现Invoke-RestMethod的SessionVariable/WebSession变量概念?
- php - 作曲家脚本参数的良好实践
- vba - 如何使用 VBA 获取 word 文档的磁盘路径?Document.Path 改为返回 Web 路径
- ios - FIRInvalidArgumentException:不支持嵌套数组
- python - 压缩时获取压缩文件的大小
- autohotkey - Control发送[Strg]+[Win]+[Numpad3]到OBS Studio
- arrays - 我真的无法理解仅仅由于编写函数的差异而发生的错误
- clickhouse - 可以从 clickhouse 中的查询结果创建平面数组吗?