【问题标题】:Query flat data firebase, angularfire查询平面数据firebase,angularfire
【发布时间】:2015-12-23 19:22:32
【问题描述】:

我的数据以以下结构存储在 firebase 中(图 1)。我遵循了结构化数据的指导方针,并将其保存在一个平面结构中,其中包含事件和用户的键值对,以允许多对多关系引用。我想使用用户 ID 来查找用户可以访问的事件,在纯 javascript 中这很简单(见图 2),但是使用 angularfire 证明很困难,因为我想使用 firebaseObject 或数组。有谁知道如何执行这样的查询?

图 1。

{
  users: {
      user_id1: {
         events: {
            event_id1: true,
            event_id2: true
         }
      },
      user_id2: {
         events: {
            event_id3: true,
            event_id4: true
         }
      },
      user_idN...
  },
  events: {
    event_id1: {
        users: {
           user_id1: true
         }
    },
    event_id2: {
        users: {
           user_id1: true
         }
    },
    event_idN...
  }
}

图2

// List all of user_id1's events
var ref = new Firebase("https://<<example>>.firebaseio.com/");
// fetch a list of user_id1's events
ref.child("users/user_id1/events").on('child_added', function(snapshot) {
  // for each event, fetch it and print it
  String groupKey = snapshot.key();
  ref.child("events/" + groupKey).once('value', function(snapshot) {
    console.log(snapshot.val());
  });
});

【问题讨论】:

  • 你在使用 angularJS 吗? @anauleau
  • 是的,我同时使用 AngularJs。
  • 您能否也分享该代码。你如何使用它。
  • 我还没用。我不知道如何使用 $firebaseObject 来实现图 2。我需要附加它的范围。
  • 参考这个。这可能会帮助你firebase.com/docs/web/libraries/angular/api.html

标签: javascript angularjs firebase angularfire


【解决方案1】:

这是在 AngularFire 中使用 $extend 的绝佳案例。

您正在共享 $event_id 密钥,因此可以在检索到用户之后加载事件。

app.factory("UserFactory", function($firebaseObject) {
  return $firebaseObject.$extend({
      getEvent: function(eventId) {
        var eventRef = new Firebase('<my-firebase-app>/events').child(eventId);
        return $firebaseObject(eventRef);
      }
   });
});

app.controller('MyCtrl', function($scope, UserFactory) {
  var userRef = new Firebase('<my-firebase-app>').child("users/user_id1/");
  var user = new UserFactory();
  $scope.event = user.getEvent(user.events.event_id1);
});

See the API reference for more information.

【讨论】:

  • 谢谢,今天晚些时候测试一下。我正在处理多个事件,但我假设我可以将每个事件 obj 传递给一个数组。
猜你喜欢
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多