Angular 6/TypeScript/JavaScript içinde nesne dizisi içinde bulma
Angular 6 uygulamamın HTML şablonunda aşağıdaki koda sahibim.
<div *ngIf ="conversation.participants[conversation.updatedBy.toLowerCase()].firstName">somedata </div>
Aslında katılımcılar dizisinin içinde updatedBy değerine göre arama yapmaya çalışıyorum ve eşleşen nesnenin firstName özelliğinin null olup olmadığını görmek istiyorum ama bana firstName tanımlı değil hatası veriyor.
] parantezlerinden sonra aşağıdaki gibi soru işareti koymayı da denedim ama herhangi bir sonuç vermedi.
conversation.participants[conversation.updatedBy.toLowerCase()]?.firstName
Aşağıda bir json nesnesi bulunmaktadır
"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"
}
Bunun hakkında bildiğiniz bir şey varsa lütfen bana bildirin.
Teşekkürler
Cevap #1
Component.ts dosyanızda, *ngIf içinde kullandığınız boolean sonucu saklayacak bir değişken bildirmeniz gerekiyor. Ayrıca, conversation değişkeni değiştiğinde bu değeri güncelleyin.
Örneğin, component.ts içinde
let firstNameExists = false;
getConversationData(){
this.conversation = ....
this.firstNameExists = this.conversation.participants.find(m=>m.userId.toLowerCase()==this.conversation.updatedBy).firstName? true: false;
}
ve sonra component.html dosyanızda
<div *ngIf ="firstNameExists">somedata </div>
Not: Bu ifade ts'de kullanılıyor çünkü Angular bağlamalarında ifadeler kullanmak çok kötü bir uygulamadır.
Cevap #2
this.conversation.participants.find(x => x.userId.toLowerCase() === this.conversation.updatedBy).firstName;
stackblitz
