Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何导航从AngularFire返回的对象?_Javascript_Angularjs_Firebase_Angularfire - Fatal编程技术网

Javascript 如何导航从AngularFire返回的对象?

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

当我运行以下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
}