【问题标题】:How to get values and $id from $firebaseArray in angularJS如何从 angularJS 中的 $firebaseArray 获取值和 $id
【发布时间】:2016-12-06 13:15:10
【问题描述】:
您好,我不是 firebase 方面的专家,刚开始工作。在搜索了很多地方后,我找不到解决问题的方法。
My firebase database structure is as follow:
我想检索特定配置文件的数据以及由 firebase 生成的唯一 $id 和。
$scope.login = function(users)
{
firebase.auth().signInWithEmailAndPassword(users.email, users.password)
.then(function(result)
{
var ref = firebase.database().ref("/profiles");
var examination = $firebaseArray(ref.orderByChild('uid').equalTo(result.uid));
console.log(examination);
我得到的结果是
like this
任何人都可以在这方面帮助我,即如何从结果中获取值。提前致谢。
【问题讨论】:
标签:
javascript
angularjs
firebase
firebase-realtime-database
【解决方案1】:
如果您想检索数据并将其记录到您的代码中,请不要使用 AngularFire 并坚持使用 JavaScript SDK:
$scope.login = function(users) {
firebase.auth().signInWithEmailAndPassword(users.email, users.password)
.then(function(result) {
var ref = firebase.database().ref("/profiles");
var examination = ref.orderByChild('uid').equalTo(result.uid);
examination.on('value', function(snapshot) {
console.log(snapshot.val());
});
您会注意到我添加了on('value',这是您告诉 Firebase SDK 开始从数据库加载数据的方式。 Firebase documentation for web developers 涵盖了这一点以及更多内容,我强烈建议您端到端阅读。在那里度过几个小时,会比你想象的更多的问题。
如果您更喜欢坚持使用 AngularFire,那么您应该停止使用 console.log 来检查加载状态。来自AngularFire quickstart:
...$scope.data 将从远程服务器填充。这是一个异步调用,因此数据在控制器中可用之前需要一些时间。虽然在下一行放置 console.log 以读取结果可能很诱人,但数据尚未下载,因此该对象将显示为空。
相反,您可以直接在 HTML 模板中显示数据:
记录数据的最简单方法是使用 Angular 的 json 过滤器在视图中打印它。 AngularFire 会告诉 Angular 编译器何时完成加载数据,因此无需担心何时可用。
<pre>{{ data | json }}</pre>
最后一个 sn-p 来自 AngularFire 指南中的 handling asynchronous operations。
【解决方案2】:
使用$loaded() promise 查看值:
$scope.login = function(users)
{
firebase.auth().signInWithEmailAndPassword(users.email, users.password)
.then(function(result)
{
var ref = firebase.database().ref("/profiles");
var examination = $firebaseArray(ref.orderByChild('uid').equalTo(result.uid));
//console.log(examination);
examination.$loaded().then(function (exam) {
console.log(exam);
});
重要的是要意识到调用$firebaseArray 方法会立即返回一个空数组。从服务器返回数据后,现有引用将填充实际数据。
$loaded() 方法返回一个承诺,该承诺在从数据库下载数组数据时解决。承诺解析为$firebaseArray。