当前位置: 首页 > 知识库问答 >
问题:

使用angularfire:0.8.0时,startAt和endAt未按预期工作

金高轩
2023-03-14

使用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时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 );
});

日志输出为:

优先级为: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

共有1个答案

童宏富
2023-03-14

看起来所有数据的优先级都为空。这会阻止结束和开始正常工作。

出现问题的线索是数据中是否存在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
 类似资料:
  • 版本信息 角度:1.5.8火基:3.2.1角度:2.0.1 测试用例 预期行为 创建具有指定起点的查询。 实际行为

  • 我读了Dan McGrath对这个问题的回答,他说在Firestore中有以下代码行的等价物: 这一行在Firebase Realtime database中工作得很好,但我试图在云Firestore中找到等效的几天。有人能帮我吗? 提前感谢!

  • 我有一个应用程序实体,其中包含一些参数,如CustomerName、Address和CardNumber。在用Jackson将其序列化为JSON时,我希望卡号被屏蔽。例如,如果CardNumber为1234567890134,我希望JSON的值为CardNumber:1234*******1234。所以我在Card Number属性上添加了@JsonSerialize注释,并使其使用我的自定义序列

  • 我已经尝试了其他帖子的建议,但没有成功。我只是遇到了一个问题,我得到了以下代码,当用户单击特定日期时显示来自Firebase数据库的数据。如果我注释掉(start At(), endAt()),回收器将填充所有数据,当我添加equalTo()或start At(). endAt()时,回收器不会填充。之前的代码正常工作,只是最近停止工作,我不知道为什么。代码如下所示:贝娄是适配器: 这是查询: 我

  • 我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它

  • 当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。