angularjs - Firebase + AngularFire -> 状态?

标签 angularjs firebase angularfire

我想知道如何在 FireBase 环境中处理对象状态

我所说的“状态”是什么意思?好吧,假设您有一个用于组织订单列表的应用程序。每个列表由一堆订单组成,因此可以将其视为分层数据结构。此外,每个列表都有一个状态,它可能是以下之一:

  • 推迟
  • 打开
  • 关闭
  • 已发送
  • 已确认
  • 商品已完全收到
  • 部分收到商品
  • 其他东西

在视觉 (HTML) 方面,列表应通过其状态来区分。每个状态都应在其自己的 div 元素中呈现给客户端,并列出下面的所有相关订单。

所以问题是,如何在 FireBase(或任何其他基于文档的数据库)中处理这个状态

结构

我是不是...

...(选项 1)为每个订单列表使用一个 state 字段,并使用 if 或类似的方式在客户端进行过滤:

  • orderlist1.state = 打开
    • 订单1
    • 订单2
  • orderlist2.state = 打开
    • 订单1
  • orderlist3.state = 已关闭
  • orderlist4.state = 延迟

...(选项 2)使用 FireBase 的层次结构对订单列表进行分类,如下所示:

  • 打开
    • 订单列表1
      • 订单1
      • 订单2
    • 订单列表2
      • 订单1
  • 已关闭
    • 订单列表3
  • 推迟
    • 订单列表4

...(选项 3)采取完全不同的方法?

那么,这里的王道是什么?

选项 2 的检索、处理和可视化输出

由于选项 1,这个问题的答案显然非常简单(如果 state == ...),我继续选项 2:如何检索选项 2 中的数据?我是否为每个状态使用 Firebase 对象,如下所示:

var closedRef = new Firebase("https://xxx.firebaseio.com/closed");
var openRef = new Firebase("https://xxx.firebaseio.com/open");
var deferredRef = new Firebase("https://xxx.firebaseio.com/deferred");
var somethingRef = new Firebase("https://xxx.firebaseio.com/something");

或者什么被认为是处理此类数据/结构的最佳方法?

最佳答案

这个问题没有普遍的答案。 “最佳方法”将取决于您的用例的详细信息,而您在此处尚未提供。具体来说,您将如何读取和操作数据。

NoSQL 中的数据架构就是努力进行写入以使读取变得容易。这完全取决于您计划如何使用数据。 (对于一本书的一个章节来说,这也足够了。)

“选项 1”的优点是您可以轻松迭代整个列表。如果您的列表以数百为单位,那就太好了。如果您想获取列表并在客户端动态操作它,这是一个很好的方法。

“选项 2”的优点是您可以轻松获取列表的子集。如果您的列表以数千为单位,并且您通常只获取 Unresolved 问题而不是已解决的问题,那就太好了。这对于像您这样的归档/新/旧列表非常有用。

还有其他选项。

使用优先级对数据进行排序

也许最通用的方法是使用 ordered data 。这允许您query a subset使用类似以下内容的记录:

new Firebase(URL).startAt('open').endAt('open').limit(10);

在大多数情况下,您只有一个条件,或者您可以毫无困难地从多个条件(例如“开放:营销”)创建唯一标识符时,这就足够了。例如记分板、像您这样的状态列表、按时间戳排序的数据。

使用索引

您还可以通过 creating an index of keys 创建数据的自定义子集并用它来获取其他的。

当您的子集没有可识别的特征时,这是最有用的。例如,如果我从列表中选择它们并存储我的最爱。

关于angularjs - Firebase + AngularFire -> 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776195/

相关文章:

android - Android 和 IOS 上的 Firebase 推送通知有问题吗?

android - 将 Firebase 数据导入 android 类

javascript - Angularfire firebase 身份验证 - 谷歌

javascript - AngularJS 中的表单始终无效

javascript - 使用 Angular 将多维数组转换为多列表

javascript - 如何使用 ng-grid 的指令包装器以及由指令属性确定的网格选项?

java - 如何将用户注册到 firebase 注册中?

angularjs - 如何使用 AngularFire 将图像上传到 firebase?

javascript - 返回 Firebase 项目 AngularFire 的 $add ref

javascript - Angular Translate - 获取翻译表