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

Firebase/angularFire使用start At/endAt查询不起作用

方璞
2023-03-14

我有一个使用Firebase SimpleLogin的应用程序,但由于我有额外的用户数据,我将其存储在[my-fire base]下。firebaseio.com/users/[用户名]。下面的片段显示了它是如何完成的

 var User = {
    create: function (authUser, username) {

      users[username] = {
        md5_hash: authUser.md5_hash,
        username: username,
        email: authUser.email,
       $priority: authUser.uid
      };

      users.$save(username).then(function () {
        setCurrentUser(username);
      });

    },
    ...

由于每个单独用户的数据都是基于用户名我通过uid优先排序的,因此我可以稍后通过uid获取其他用户数据。

当firebase登录事件触发时,我有以下处理程序,负责查询firebase以获取additionala用户数据,并将其存储在$rootScope上。currentUser通过方法设置currentUser(用户名)这是我的登录事件处理程序

var ref = new Firebase(FIREBASE_URL + '/users');
var users = $firebase(ref);

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

      var query = $firebase(ref.startAt(authUser.uid).endAt(authUser.uid));

      query.$on('loaded', function () {
  //PROBLEM: console.log(query.$getIndex()) logs an empty array 
        setCurrentUser(query.$getIndex()[0]);
      });
});

一旦启动登录事件,我就可以访问authUser,其中包含登录用户的uid。然后,我按uid查询firebase/用户,使用startAt/endAt限制我的结果,以便只剩下当前登录的用户。

然后,当从Firebase加载查询数据时,我调用setMONtUser方法,该方法将当前用户的用户名存储在$rootScope上。

问题使用start At/endAt的查询过滤不起作用,当我console.log查询时,我会取回一个空数组。$getIndex()当我应该获取一个具有当前登录用户用户名的数组时。

我正在使用firebase 1.0.15、angularFire 0.7.1和firebase simple login 1.4.1,并遵循Thinkster的本教程。io

共有1个答案

谈渊
2023-03-14

最后,在我的代码中的某个地方,我在我的用户绑定上有一个$保存(),以保存他们一直在处理的最后一个项目的id,这导致了$优先级问题。我使用了$update,现在一切都像魅力一样工作!

我仍然不知道这是否是$保存()的预期行为为了澄清和提供更多上下文,我没有向$保存()方法传递任何键,我只是在本地用户引用上添加了一个属性,并保存了它

$rootScope.currentUser.lastWorkingProject = projectId;
$rootScope.currentUser.$save();
 类似资料:
  • 版本信息 角度:1.5.8火基:3.2.1角度:2.0.1 测试用例 预期行为 创建具有指定起点的查询。 实际行为

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

  • 使用AngularFire 8.0 Bellow是使用startAt和endAt限制firebase数据的代码。 返回的数据应该是来自firebase的单个元素,但在使用console时queryArray为空。调试日志。 没有使用startAt和endAt,queryArray包含存储在firebase中的所有元素。因此,记录queryArray$keyAt(0)将第一个元素的名称作为输出。正如

  • 我有一个firebase查询,如下所示: 我查询的区域结构如下所示 基于在这里找到的按键排序功能,它首先尝试将键排序为数字,然后按字典顺序排序。正如您在图像中看到的,我的键是字符串。 当和查询不太起作用,因为它返回这个。从我的理解来看,它不应该返回对象的第一个属性,但当我设置和时,它返回: 对我来说,这似乎不正确,因为它应该不返回任何内容,因为从“0795”开始到“0810”结束的字符串之间不存在

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

  • 你能帮我解决这个问题吗?我想使用此方法在我的数据库中查找特定的缺口(它是由Apache Derby制作的)。我使用了EntityManager并从NetBeans中的数据库中映射持久性-实体类。 我得到这个错误: Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:< br >异常描述:解析[SELECT * FROM U