我正在尝试将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
。任何人都可以帮忙解释一下我可能做错了吗?
提前致谢!
答案 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)