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

时间:2014-06-10 13:28:14

标签: angularjs firebase angularfire

我有一个使用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以获取addala用户数据,并通过方法setCurrentUser(username)将其存储在$ 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上存储cu​​rrentUser的用户名。

问题 使用startAt / endAt进行的查询过滤不起作用,当我调试时,我正在获取一个空数组.log query.$getIndex()当我应该使用当前登录用户的用户名获取数组时。

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

1 个答案:

答案 0 :(得分:0)

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

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

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