【问题标题】:How to filter data Firebase and ionic如何过滤数据 Firebase 和 ionic
【发布时间】:2021-11-09 17:17:47
【问题描述】:

我被 Firebase 卡住了。我已将 firebase^4.8.0 添加到我的 ionic 项目中,并正在实施实时聊天。 我从发送的消息中发送数据如下。

send(){
    this.datasend = {
        'sender': this.sessionData.mobile,
        'sendTo': this.data.id,
        'message': this.chatt,
    }

    this.chatt = '';

    firebase.database().ref('chats').push(this.datasend).then(res => {
         // logic here
    });
}

到目前为止一切顺利。我使用手机号码作为ID,当我发送数据时,我转发消息,发件人的手机号码和收件人的手机号码。这非常有效。

但我需要恢复这些数据。我只需要向代理和收件人显示消息。我需要知道如何为此制作过滤器。

我正在启动 Firebase。

我目前卡在这部分。

getmessages() {
    this.ref.on('value', data => {
        let tmp = [];
        date.forEach (date => {
            tmp.push ({
              'sender': data.val(). sender,
              'sendTo': data.val(). sendTo,
              'message': data.val(). message,
            })
        });
        this.messagesList = tmp;
    });
}

我只需要从各自的聊天中获取消息。 请对过滤器或其他存储消息的方式提出任何建议,以帮助我解决此问题。

【问题讨论】:

  • 你应该使用这样的引用 ref('chats/CHAT_ID/')
  • 您在寻找如何过滤数据吗?如果是这样,这将是一个很好的起点:firebase.google.com/docs/database/web/…
  • 你能教我练习一下吗? @HarshitRastogi

标签: javascript firebase ionic-framework firebase-realtime-database


【解决方案1】:

我使用各个用户的用户 ID 创建了一个CHAT_ID。 假设有两个用户的 ID:20 和 4,所以我在对这些用户 ID 进行排序后创建了一个聊天 ID Math.min(20,4)

 const getMessages = () => {
    const CHAT_ID = Math.min(currentUser.id, otherUser.id)
    const chatref = 
    firebase.database().ref(`/chats/${CHAT_ID.toString()}`);
    chatref.off('value');
    chatref.on('value', chatsSnap => {
        const chatsArray = snapshotToArrayObject(chatsSnap);
        setStorage(`chats_${chatRoom.current}`, chatsArray);
        setChatMessages(chatsArray);
        scrollToRecentMessage();
        markAsRead();
    });
}

并且发送消息时:

const sendMessage = () => {
   const messageArray = {
      to: otherUser.id,
      from: currentUser.id,
      message: newMessage,
      messageSeen: false,
      timeStamp: new Date()
   };
   const CHAT_ID = Math.min(currentUser.id, otherUser.id)
   firebase.database().ref(`/chats/${CHAT_ID.toString()}`)
                .push(messageArray);

}

希望对你有帮助

【讨论】:

  • 哇哦!好点子。我会这样工作。非常感谢。但请注意,您创建 id 的方式有点奇怪。 Math.min 可以为其他用户创建相同的 ID。您应该寻找另一种创建 ID 的方法。感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
相关资源
最近更新 更多