我有一个离子聊天应用程序,可以从Firebase获取聊天消息。一切正常,但我想做到这一点,以便每条新消息都能像WhatsApp一样滑到列表的顶部。我的聊天列表是一个从Firebase更新的数组,但是我需要一种方法,以便在收到新消息时对该数组重新排序。谢谢。
//my ts
ionViewWillEnter() {
this.chatService.getAllMatchMessages();
this.chatService.getAllTypers();
this.firebaseService.getOnlinePresence();
this.RequestService.getTempFriends();
this.myTempFriends = [];
this.events.subscribe("tempFriends", () => {
this.myTempFriends = [];
this.myTempFriends = this.RequestService.myTempFriends;
this.temparr = this.RequestService.myTempFriends;
this.tempFriendsuid = [];
this.tempFriendsuid = this.myTempFriends.map(personObj => personObj.uid);
for (var k in this.tempFriendsuid) {
this.personalMessages
.child(this.tempFriendsuid[k])
.on("value", snapshot => {
this.allMessages = [];
this.messages = snapshot.val();
this.allMessages.push(this.messages);
const temp1 = this.objectToArray(
this.allMessages[this.allMessages.length - 1]
);
if (temp1 == null) {
return;
} else {
this.lastMessage = temp1[temp1.length - 1].message;
this.lastMessageTime = temp1[temp1.length - 1].time;
}
});
}
});
}
////////////////////////////////////////////////////////
//my html
<ion-item *ngFor="let item of myTempFriends;let i= index"
(click)="matchChat(item)">
<ion-avatar item-left>
<img src="../assets/imgs/background.jpg">
</ion-avatar>
<div class="time">
<h3>{{item.username}} is {{onlineStatusArray[i]}}</h3>
<p *ngIf="lastMsgArr[i]">{{lastMsgArr[i][lastMsgArr[i].length-1].time}}</p>
</div>
<div *ngIf="lastMsgArr[i] && typersArr[i] === false">
<ion-icon class="msgIcon" name="done-all"
*ngIf="lastMsgArr[i][lastMsgArr[i].length-1].sentBy==userId &&
lastMsgArr[i][lastMsgArr[i].length-1][userId]==0 &&
lastMsgArr[i][lastMsgArr[i].length-1][item.uid]==0"></ion-icon>
<ion-icon class="msgIcon" name="water"
*ngIf="lastMsgArr[i][lastMsgArr[i].length-1].sentBy==item.uid &&
lastMsgArr[i][lastMsgArr[i].length-1][item.uid]==0 &&
lastMsgArr[i][lastMsgArr[i].length-1][userId]==1"></ion-icon>
<ion-icon class="msgIcon" name="checkmark"
*ngIf="lastMsgArr[i][lastMsgArr[i].length-1].sentBy==userId &&
lastMsgArr[i][lastMsgArr[i].length-1][item.uid]==1 &&
lastMsgArr[i][lastMsgArr[i].length-1][userId]==0"></ion-icon>
<p id="lastMessage" style="display:inline-block">{{lastMsgArr[i][lastMsgArr[i].length-1].message}}</p>
</div>
<div *ngIf="typersArr[i] === true">
<p id="lastMessage" style="display:inline-block">typing...</p>
</div>
</ion-item>