我只是想使用angularjs和angularfire来从我的火力基地中获取一个值...有问题。
在我的控制器内:
$scope.componentStatus = syncData("components/-JI_JgHxm0TEUEVjADJn/status");
console.log($scope.componentStatus);
这将返回一个对象,其中$value
为其中的一个对象。
但是,当我尝试:
console.log($scope.componentStatus.$value);
我得到Undefined
作为结果。
任何指针?我觉得这应该是一件容易的事,所以我只是错过了一些东西。
使用的版本
https://cdn.firebase.com/v0/firebase.js
Angularjs - 1.2.7
Angularfire - 0.6.0
数据结构
components : {
"-JI_dFtOxE5k1ZFeZu8a" : {
"experience" : "-JJ8jT0oJA3vYOeBNpq5",
"name" : "Name of Component",
"status" : "-JJ8hQcUb0_ip9Hoqcqq",
"theme" : "-JJ8mD9tEsBw3a3g9Wz6"
},
}
答案 0 :(得分:1)
这是对异步进程的一个简单误解。在您致电$value
时,尚未从服务器获取数据。
尝试在$ on('loaded',...)回调中调用它:
$scope.componentStatus = syncData("components/-JI_JgHxm0TEUEVjADJn/status");
$scope.componentStatus.$on('loaded', function() {
console.log($scope.componentStatus.$value);
});
请注意,如果你真正尝试做的是在DOM中显示,那么就不必担心数据何时到来 - Firebase和Angular会自行解决这个问题:
<div>When it arrives, it will appear here: {{componentStatus.$value}}</div>
这是展示这些概念的小提琴: http://jsfiddle.net/katowulf/e7WFf/
另一个用$ bind显示相同的想法: http://jsfiddle.net/katowulf/4J356/
从angularFire 0.8.0开始,您还可以将$firebase
对象视为承诺,类似于此:
var data = syncData("components/-JI_JgHxm0TEUEVjADJn/status").then(function() {
console.log(data.$value);
});