使用AngularFire 8.0
波纹管是使用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
您所有数据的优先级似乎都为空。这会阻止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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句