javascript - 将对象存储在 firebase 中以便稍后以简单的方式重新排序的正确方法是什么?

标签 javascript angular firebase firebase-realtime-database angularfire2

我有一个这样的列表

    {"ids": [
      {
        "id1": {
          "name": "name1",
          "lastname": "lastname1"
        }
      },
      {
        "id2": {
          "name": "name2",
          "lastname": "lastname2"
          }
      },
      {
        "id3": {
          "name": "name3",
          "lastname": "lastname3"
        }
      },
      {
        "id4": {
          "name": "name4",
          "lastname": "lastname4"
        }
      }
      ]
    }

然后我检索并显示它:

    import {Component} from '@angular/core';
    import {AngularFire, FirebaseListObservable} from 'angularfire2';

    @Component({
      selector: 'app',
      templateUrl: `
      <ul>
        <li *ngFor="let id of ids | async">
        {{ id.name }}
        </li>
      </ul>
      `,
    })
    class AppComponent {
    ids: FirebaseListObservable<any>;
      constructor(af: AngularFire) {
        this.ids = af.database.list('/ids');
      }
    }

结果:

name1
name2
name3
name4

假设我想重新排序/移动一些对象,所以我得到这样的结果:

name3
name1
name2
name4

构建我的对象以轻松实现这一目标的好方法是什么? 我可以添加“order”属性,更新它并按“order”属性对查询进行排序。

    this.ids = af.database.list('/ids',{
          query: {
    orderByChild: 'order'
    }
    });

或者也许我可以添加以前的 id 键作为属性,但是如何显示列表,同时考虑“以前的”属性?我弄清楚了如何实现这一点以避免 future 的可扩展性问题。

最佳答案

首先,您必须添加用于存储订单的属性。

其次,您不应该将此数据保存为数组,因为 firebase 无论如何都将其存储为对象。相反,您应该另存为对象。

查看以下链接了解更多信息。

https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html

因此,您的 firebase 数据库应该如下所示。

"ids": {
    "id1": {
        "name": "name1",
        "lastname": "lastname1",
        "order": 1
    },
    "id2": {
        "name": "name2",
        "lastname": "lastname2",
        "order": 2
    },
    "id3": {
        "name": "name3",
        "lastname": "lastname3",
        "order": 3
    },
    "id4": {
        "name": "name4",
        "lastname": "lastname4",
        "order": 4
    }
}

并且您应该通过 order 属性进行查询。

关于javascript - 将对象存储在 firebase 中以便稍后以简单的方式重新排序的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40115201/

相关文章:

javascript - 如何在 javascript 中设置 JSTL 变量值?

javascript - 在 dust.js 中,$idx 的初始值不能从零开始吗?

javascript - 将图像源设置为从链接 href 检索到的值

Angular 2 不使用 CORS 保存我的身份验证 Cookie

angular - 如何在 Angular 4 和 @angular/cli 中动态添加组件到 NgModule?

android - 出现错误;没有为类型 '[]' 定义运算符 'Object? Function()'

ios - 如何根据segmentedControl的选定索引更改刷新器的功能

ios - Firebase 从设备发送推送通知 (IOS)

javascript - VSCode 不会自动完成 Node.JS 模块

angular - 无法使用Go lang设置Cookie