javascript - 使用 angularfire : 0. 8.0 startAt 和 endAt 未按预期工作

标签 javascript firebase angularfire firebasesimplelogin

Using 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 );
});

日志输出为:

Priority is: null

用于将用户添加到 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

最佳答案

看起来您所有数据的优先级都为空。这会阻止 endAtstartAt 正常工作。

出现问题的线索是数据中存在 setPriority 键。优先级是在普通 View 之外管理的元数据。

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

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

关于javascript - 使用 angularfire : 0. 8.0 startAt 和 endAt 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25428069/

相关文章:

javascript - 从不同的 js 文件调用函数是否比从一个文件调用函数慢?

java - 如何在组合框中动态添加值?

android - 谷歌登录在模拟器中有效,但在手机中无效

javascript - angularfiresignedIn 函数仅在页面刷新时评估?

javascript - 庆典 : tslint: command not found

node.js - 将 Express 应用程序导出到 Firebase 函数时,是否可以在 Firebase 控制台中列出单独的端点

firebase - 如何查找属于 Firebase 应用程序一部分的用户?

javascript - 按日期范围的 Firestore 查询

javascript - firebase 加载到 DOM 后的事件

javascript - 如何将选定的表 tr 移动到另一个表?