3

使用 AngularFire 8.0

Bellow 是使用 startAt 和 endAt 来限制来自 firebase 的数据的代码。

$rootScope.$on('$firebaseSimpleLogin:login', function(e, authUser){

  var queryRef = ref.startAt(authUser.uid).endAt(authUser.uid);

  var queryArray = $firebase(queryRef).$asArray();

  queryArray.$loaded().then(function() {

    setCurrentUser(queryArray.$keyAt(0));

  });
});

返回的数据应该是来自 firebase 的单个元素,但是当我使用 console.log 进行调试时 queryArray 是空的。

在不使用 startAt 和 endAt 的情况下,queryArray 包含存储在 firebase 中的所有元素。因此,记录queryArray.$keyAt(0)会给出第一个元素名称作为输出。正如预期的那样。

我也检查了 Firebase 8.0 的发行说明,我没有看到这些限制器有任何变化。

请指出是否有任何语法错误或任何可以达到预期结果的替代解决方案。

我基本上想要来自 Firebase 的单个记录,这是我当前的用户,authUser 是授权用户,以 authUser.uid 为优先级。

以下是用户注册时在 Firebase 中填充的 JSON 文件。

{
  "users" : {
    "User A" : {
      "md5_hash" : "d10ca8d11301c2f4993ac2279ce4b930",
      "setPriority" : "simplelogin:69",
      "username" : "User A"
    },
    "User B" : {
      "md5_hash" : "2076105f6efe7c11e285add95f514b9a",
      "setPriority" : "simplelogin:70",
      "username" : "User B"
    },
    "User C" : {
      "md5_hash" : "a6d14de05d7b2c3cf4fae7ae14cfa7f3",
      "setPriority" : "simplelogin:71",
      "username" : "User C"
    }
  }
}

编辑后

使用下面的代码来获得优先级:

queryRef.once('value', function(nameSnapshot) {
  var val = nameSnapshot.getPriority();
  console.log("Priority is: " + val );
});

日志输出为:

优先级为:空

用于将用户添加到 Firebase 的方法是:

create: function (authUser, username) {
  users[username] = {
    md5_hash: authUser.md5_hash,
    username: username,
    setPriority: authUser.uid
  };

users.$update(username, {
    md5_hash: authUser.md5_hash,
    username: username,
    setPriority: authUser.uid
    //$priority: authUser.uid
  }).then(function () {
    setCurrentUser(username);
  });

}, // end of create method
4

1 回答 1

1

看起来你所有数据的优先级都是空的。这会阻止endAtstartAt无法正常工作。

出现问题的线索是setPriority数据中存在密钥。优先级是在正常视图之外管理的元数据。

将您的用户创建代码更改为以下内容:

create: function (authUser, username) {
  users[username] = {
    md5_hash: authUser.md5_hash,
    username: username,
    .priority: authUser.uid
  };

} // end of create method

或这个:

create: function (authUser, username) {
  users[username] = {
    md5_hash: authUser.md5_hash,
    username: username
  };

users.$update(username, {
    md5_hash: authUser.md5_hash,
    username: username
  }).then(function (dataRef) {
    dataRef.setPriority(authUser.uid);
    setCurrentUser(username);
  });

} // end of create method
于 2014-08-21T18:17:44.557 回答