角火:Return $值

AngularFire: Return $value

我正在尝试将我的 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);
})

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

我正在尝试在控制台日志中检索 $value。任何人都可以帮助解释我可能做错了什么吗?

提前致谢!

肯定会向您展示 object var title = $firebase(ref.child('title')).$asObject();

你的标题是object

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

你所说的 "a weird object" 只是一个 AngularFire object。鉴于您这样分配它,这几乎是意料之中的:

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

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