在Ion Firebase聊天应用程序中重新排序聊天

时间:2019-04-24 16:42:05

标签: firebase ionic-framework

我有一个离子聊天应用程序,可以从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>

0 个答案:

没有答案