什么是angularfire&$ 39的价值?

时间:2014-03-26 19:17:11

标签: angularjs firebase angularfire

我只是想使用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"
    },
}

1 个答案:

答案 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);
});