AngularFire:返回$ value

时间:2015-01-23 01:56:12

标签: javascript angularjs firebase angularfire

我正在尝试将service.title记录到控制台,但它会将其作为一个奇怪的对象继续传回。

.factory('service', function($firebase, FBURL, $routeParams) {
  var ref = new Firebase(FBURL + "services/" + $routeParams.serviceId);
  var title = $firebase(ref.child('title')).$asObject();

  return {
    id: $routeParams.serviceId,
    title: title
  }
})

.controller('ServiceController', function ($scope, $firebase, service, $routeParams, FBURL) {
  $scope.service = service;

  console.log($scope.service.title);
})

这是我从控制台回来的内容:

enter image description here 我正在尝试在控制台日志中检索$value。任何人都可以帮忙解释一下我可能做错了吗?

提前致谢!

2 个答案:

答案 0 :(得分:4)

你所谓的“奇怪的对象”只是一个AngularFire对象。考虑到你这样分配,这是非常期待的:

var title = $firebase(ref.child('title')).$asObject();

当您在简单值上调用$ asObject时,AngularFire会将实际值保留在$value属性中。

但当然,这些值是从Firebase服务器异步检索的,所以在设置ref和被叫$asObject之后不能立即获得。所以这不起作用:

var ref = new Firebase(FBURL + "services/" + $routeParams.serviceId);
var title = $firebase(ref.child('title')).$asObject();
console.log(title.$value);

相反,你需要回应什么时候可用,AngularFore有一些很好的承诺:

var ref = new Firebase(FBURL + "services/" + $routeParams.serviceId);
var title = $firebase(ref.child('title')).$asObject();
title.$loaded().then(function(title) {
  console.log(title.$value);
});

如果您想要处理自己代码中的数据,则只需要处理此承诺。如果您只想将标题绑定到AngularJS视图(这是AngularFire的用途),视图将自动更新。嗯...不是真的自动,它听取类似的承诺来解决。但在这种情况下,您不必在自己的代码中处理它。

答案 1 :(得分:1)

肯定会告诉你对象 var title = $ firebase(ref.child('title'))。$ asObject();

您的标题是对象

所以如果你控制它。它会打印对象。 如果你想要值使用console.log($ scope.service.title。$ value)