Javascript 如何导航从AngularFire返回的对象?
当我运行以下Firebase查询时:Javascript 如何导航从AngularFire返回的对象?,javascript,angularjs,firebase,angularfire,Javascript,Angularjs,Firebase,Angularfire,当我运行以下Firebase查询时: var ref = new Firebase('https://<myfirebase>.firebaseio.com/companies/endo/status'); data = $firebaseObject(ref); console.dir(data); 我试图访问值为339的“Completed”元素。但是,console.log(数据['Completed'])返回未定义。有什么问题?一个$firebase
var ref = new Firebase('https://<myfirebase>.firebaseio.com/companies/endo/status');
data = $firebaseObject(ref);
console.dir(data);
我试图访问值为339的“Completed”元素。但是,
console.log(数据['Completed'])
返回未定义。有什么问题?一个$firebaseObject
开始时是一个空对象,但当数据从Firebase数据库下载后,它就会填充该对象
首先,你看不到任何东西,因为数据还没有下载。创建$firebaseObject
后,您的console.log()
将运行一纳秒。数据在几毫秒后下载
所以你可能会问,如果数据一开始不存在,我该如何处理它?
您可以做的是将$firebaseObject
附加到$scope
。然后将其绑定到模板中。当数据下载时,Angular$digest
循环运行并刷新模板
您的控制器如下所示:
app.controller('MyCtrl', function($scope, $firebaseObject) {
var ref = new Firebase('https://<myfirebase>.firebaseio.com/companies/endo/status');
$scope.data = $firebaseObject(ref);
});
app.controller('MyCtrl',函数($scope,$firebaseObject){
var ref=新的Firebase('https://.firebaseio.com/companies/endo/status');
$scope.data=$firebaseObject(ref);
});
您的模板如下所示:
<div>Did you do it? {{ data.Completed }}</div>
是你做的吗?{{data.Completed}
还有另一种方法,需要更多的设置,但这是我个人的最爱。您也可以使用路由器将数据解析到控制器中
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
}
angular.module('app',['firebase']))
.constant('FirebaseUrl','')
.service('rootRef',['FirebaseUrl',Firebase])
.controller('MyCtrl',MyController)
.config(应用程序配置);
函数应用程序配置($routeProvider){
$routeProvider.when(“/”{
控制器:“MyCtrl”,
模板:“view.html”,
决议:{
数据:函数($firebaseObject,rootRef){
var ref=rootRef.child('companys/endo/status');
//对下载数据的承诺
返回$firebaseObject(ref)。$loaded();
}
}
});
}
函数MyController($scope,data){
$scope.data=数据;
console.log(data.Completed);//将工作,因为数据已下载
}
感谢您的详细解释,David!没问题。如果有任何不清楚的地方,请告诉我。如果没有其他考虑,请您将答案标记为已接受?保持未应答队列干净是件好事:)
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
}