当我运行以下Firebase查询时:
var ref = new Firebase('https://<myfirebase>.firebaseio.com/companies/endo/status');
data = $firebaseObject(ref);
console.dir(data);我得到了以下目标:
d
$$conf: Object
$id: "status"
$priority: null
Active, not recruiting: 39
Approved for marketing: 1
Completed: 339
Enrolling by invitation: 10
Not yet recruiting: 23
Recruiting: 128
Suspended: 3
Terminated: 38
Unknown: 74
Withdrawn: 15
__proto__: Object我试图访问值339的“已完成”元素。但是,console.log(data['Completed'])返回未定义的。怎么啦?
发布于 2016-01-21 19:49:49
$firebaseObject从空对象开始,但是当数据从Firebase数据库下载后,它将填充该对象。
一开始,你没有看到任何东西,因为数据还没有下载。您的console.log()在创建$firebaseObject后运行纳秒。数据被下载后毫秒。
因此,您可能会问,如果数据一开始不存在,如何处理?
您可以做的是将$firebaseObject附加到$scope。然后将其绑定到模板中。当数据下载的角度$digest循环运行,并刷新您的模板。
您的控制器将如下所示:
app.controller('MyCtrl', function($scope, $firebaseObject) {
var ref = new Firebase('https://<myfirebase>.firebaseio.com/companies/endo/status');
$scope.data = $firebaseObject(ref);
});您的模板将如下所示:
<div>Did you do it? {{ data.Completed }}</div>还有另一种方式,它需要更多的设置,但这是我个人的最爱。您也可以使用路由器将数据解析到控制器中。
angular.module('app', ['firebase'])
.constant('FirebaseUrl', '<my-firebase-app>')
.service('rootRef', ['FirebaseUrl', Firebase])
.controller('MyCtrl', MyController)
.config(ApplicationConfig);
function ApplicationConfig($routeProvider) {
$routeProvider.when('/', {
controller: 'MyCtrl',
template: 'view.html',
resolve: {
data: function ($firebaseObject, rootRef) {
var ref = rootRef.child('companies/endo/status');
// a promise for the downloaded data
return $firebaseObject(ref).$loaded();
}
}
});
}
function MyController($scope, data) {
$scope.data = data;
console.log(data.Completed); // will work because the data is downloaded
}https://stackoverflow.com/questions/34932687
复制相似问题