首页 文章

使用startAt / endAt查询firebase / angularFire不起作用

提问于
浏览
0

我有一个使用FirebaseSimpleLogin的应用程序,但由于我有其他用户数据,我将其存储在[my-firebase] .firebaseio.com / users / [username]下 . 下面的代码段显示了它是如何完成的

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以获取additionalala用户数据,并通过方法 setCurrentUser(username) Here is my login event handler: 将其存储在$ rootScope.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 / users,使用startAt / endAt来限制我的结果,这样我只剩下当前登录的用户 .

然后,当从firebase加载查询数据时,我调用 setCurrentUser 方法,该方法在$ rootScope上存储currentUser的用户名 .

The Problem 使用startAt / endAt的查询过滤不起作用,当我在控制台时,我正在返回一个空数组 . 日志 query.$getIndex() 当我应该使用当前登录用户的用户名获取数组时 .

我正在使用firebase 1.0.15,angularFire 0.7.1和firebase-simple-login 1.4.1以及来自Thinkster.io的this tutorial

1 回答

  • 0

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

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

    $rootScope.currentUser.lastWorkingProject = projectId;
    $rootScope.currentUser.$save();
    

相关问题