javascript - 查询对 firebase 中另一个对象内的日期进行排序

标签 javascript angularjs firebase firebase-realtime-database

我正在使用 angularjs 开发聊天功能,其中有一个聊天 ListView 和一个聊天 View 。

我想做的是使用 Firebase 和 JS 对我的聊天列表进行排序,以在顶部显示最近的聊天,我做了我的研究,但我发现所有的问题都直接在我小时候就有了日期,但在我的内部DB 我的日期在“lastMessage”键中。我的日期格式如下。

date: 1528417493034

非常感谢任何帮助

我的结构如下:

"Users": {
"nCsXbTl8CcXvoviuL5Tt7kiV6Bn1" : {
      "contacts" : {
        "VN9AFnn4uXgDfoir8DWHnw54zrJ3" : {
          "email" : "test@test.com",
          "lastMessage" : {
            "date" : 1528417493034,
            "senderId" : "VN9AFnn4uXgDfoir8DWHnw54zrJ3",
            "status" : "success",
            "text" : "Yes?",
            "type" : "text",
            "uid" : "1528417493034VN9AFnn4uXgDfoir8DWHnw54zrJ3"
          },
          "name" : "test"
        },
        "cHuR26YaSgbO7ahSVLg1XG5HYer2" : {
          "email" : "aaa@aaa.com",
          "lastMessage" : {
            "date" : 1528417068249,
            "senderId" : "cHuR26YaSgbO7ahSVLg1XG5HYer2",
            "status" : "success",
            "text" : "Trigeeeers?",
            "type" : "text",
            "uid" : "1528417068249cHuR26YaSgbO7ahSVLg1XG5HYer2"
          },
          "name" : "aaa"
        }
      }
}

我的聊天 ListView 如下:

<div layout="row" class="main-chat-container" layout-wrap>
<div class="list-container" flex="30">
    <div class="chat-header">
        <p>Lista de Chats</p>
    </div>
    <div class="chats-list">
        <div class="chats-header">
            <p>Usuarios</p>
        </div>
        <div class="chats" ng-repeat="chat in chats">
            <div class="email-container" ng-click="setUserData(chat)" ng-class="styleData.email == chat.email ? 'new-background' : ''">
                <a>{{chat.email}}</a> <p ng-show="counter > 1">{{testData.number}}</p>
            </div>
        </div>
    </div>
</div>
<div class-"chat-container" flex="70">
    <ui-view></ui-view>
</div>

Controller 如下

app.controller('chatController', function (currentAuth, $scope, $firebaseArray, $firebaseObject) {

$scope.chats = [];

$scope.getContactsList = function(){
    var listRef = firebase.database().ref('Users').child(currentAuth.uid).child('contacts');
    var test = firebase.database().ref('Users').child(currentAuth.uid).child('contacts');
    var listArray = $firebaseArray(listRef);
    var testArray = $firebaseArray(test);
    $scope.chats = listArray;

    console.log("TEST ARRAY IS ");
    console.log(testArray);



}

$scope.getContactsList();
});

最佳答案

为了让用户联系他们最后一条消息的时间戳,你会做这样的事情:

var userRef = firebase.database().ref('Users').child(currentAuth.uid)
var contactsQuery = userRef.child('contacts').orderByChild("lastMessage/date");

请注意,这将按时间顺序为您提供联系人,因此您必须在客户端中反转结果。

或者有些人在他们的数据库中的一个单独的属性中保留一个倒置的值,例如

    "VN9AFnn4uXgDfoir8DWHnw54zrJ3" : {
      "email" : "test@test.com",
      "lastMessage" : {
        "date" : 1528417493034,
        "invertedDate" : -1528417493034,
        "senderId" : "VN9AFnn4uXgDfoir8DWHnw54zrJ3",

由于此 invertedDate 值是倒置的,因此对该属性进行排序将为您提供按时间倒序排列的联系人,这样您就不必在客户端中反转它们。

关于javascript - 查询对 firebase 中另一个对象内的日期进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50752937/

相关文章:

ios - 在单个应用程序中使用多个 Firebase 数据库 - Swift

javascript - 如何在 JavaScript 中围绕微时间创建时间范围的界限?

javascript - AngularJS 选择框中的默认静态 HTML 值

javascript - 如何导入模块并以 Angular 显示在 View 上?

javascript - 在 AngularJS 中使用 Promise 时出现问题

firebase - 任何将授权域添加到 Firebase Auth 的 API?

javascript - 检查多个输入空值不起作用

javascript - Facebook - 可以通过图形 Api 获取 friends_online_presence

javascript - jquery,触发链接点击与另一个点击问题?

javascript - 黑客新闻 api + angular.js 加载某些故事类型时出现问题