【问题标题】:What is angularfire's $value?angularfire 的 $value 是多少?
【发布时间】:2014-03-26 19:17:11
【问题描述】:

我只是想使用 angularjs 和 angularfire 从我的 firebase 中获取价值……有问题。

在我的控制器内部:

$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
角火 - 0.6.0

数据结构

components : {
    "-JI_dFtOxE5k1ZFeZu8a" : {
      "experience" : "-JJ8jT0oJA3vYOeBNpq5",
      "name" : "Name of Component",
      "status" : "-JJ8hQcUb0_ip9Hoqcqq",
      "theme" : "-JJ8mD9tEsBw3a3g9Wz6"
    },
}

【问题讨论】:

  • $value 在参考指南 firebase.com/docs/angular/reference.html 的构造函数部分中提到。
  • @Mikke 文档很好,但它没有解释为什么我们得到undefined 作为结果。
  • $value 只为原语定义。状态是原始的吗? $firebase 对象本身包含任何子记录的键(如果它是一个对象)。我们需要更多关于版本、数据结构和代码的信息来重现/验证这一点并真正理解问题。
  • @Kato,感谢您的回复。我用更多信息更新了这个问题。感谢您帮助我。

标签: angularjs firebase angularfire


【解决方案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);
});

【讨论】:

  • 谢谢,加藤。绝对是这样。在我的用例中,我不需要只显示该值,而是需要将其放入函数中以返回另一个值。无论哪种方式,我的挂断都是异步概念。干杯!
  • 在这种情况下,可能没有理由将其分配给范围变量。您可以使用 var componentStatus() 之类的方法在本地引用它。还更新了 0.8.0 的答案
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 2019-02-03
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 2017-03-27
  • 2018-09-21
  • 2020-06-06
相关资源
最近更新 更多