使用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)会将First元素名称作为输出。这是预期的。
我也检查了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
答案 0 :(得分:1)
看起来您所有数据的优先级都为空。这可以防止endAt
和startAt
正常工作。
有些事情发生的线索是数据中存在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