在firebase中存储对象以便以后轻松地重新排序它们的正确方法是什么?

时间:2016-10-18 18:11:58

标签: 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

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

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

或许我可以添加以前的id键作为属性,但是如何显示列表然后采取&#34; previous&#34;财产考虑?我想出了如何实现这一目标以避免未来的可扩展性问题。

1 个答案:

答案 0 :(得分:2)

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

其次,您不应该将此数据保存为数组,因为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财产来查询。