Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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 角度控制器/工厂返回未定义的对象_Javascript_Angularjs_Firebase - Fatal编程技术网

Javascript 角度控制器/工厂返回未定义的对象

Javascript 角度控制器/工厂返回未定义的对象,javascript,angularjs,firebase,Javascript,Angularjs,Firebase,我是AngularJS的新手,所以请温柔一点 我正在尝试使用factory.on('value',..)从firebase获取数据,并将其传递给控制器。将对象itemObj传递给控制器似乎有问题,因为第25行console.log(itemObj.name)显示了我们要查找的内容 工厂: 'use strict'; angular.module('MyApp') .factory('MenuItems', function(FIREBASE_ROOT) { var ref = new

我是AngularJS的新手,所以请温柔一点

我正在尝试使用factory.on('value',..)从firebase获取数据,并将其传递给控制器。将对象itemObj传递给控制器似乎有问题,因为第25行
console.log(itemObj.name)
显示了我们要查找的内容

工厂:

'use strict';

angular.module('MyApp')
.factory('MenuItems', function(FIREBASE_ROOT) {
    var ref = new Firebase(FIREBASE_ROOT);
    var refMenu = ref.child('/menu/');

    // get today's date in dd-mm-yyyy
    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth()+1; //January is 0!
    var yyyy = today.getFullYear();
    if(dd<10) { dd='0'+dd; } 
    if(mm<10) { mm='0'+mm; }
    today = dd+'-'+mm+'-'+yyyy;


  var itemObj = null;


    return  {
    items:  function() {
              refMenu.child(today).on('value', function(snapshot) {
              itemObj = snapshot.val();
              console.log(itemObj.name);
              return itemObj;
              });
            }
          };
});

代码的问题是,在工厂中,
items
函数将不返回任何内容,因为它会在附加事件处理程序后立即完成执行

返回itemObj位于事件回调内,不会传递给

我不是Firebase方面的专家,但我想你需要用承诺来让这个场景适合你。我在谷歌上搜索发现,AngularJS有一个Firebase版本

检查链接:


还有这个链接:

我应该把它放在哪里?我尝试将它带到外部:
return{items:function(){refMenu.child(今天).on('value',function(snapshot){itemObj=snapshot.val();console.log(itemObj.name);};return itemObj;}我无法使用这些命令使其工作,但我确实意识到我使用的是过时版本的angularFire&firebase。更新后的AngularFire调用使从firebase获取数据变得更加容易,因此应该这样做。谢谢,杰伊。可能是你的副本
'use strict';

angular.module('MyApp.controllers').controller('DashboardCtrl', ['$scope', '$firebase', 'FIREBASE_ROOT', 'Auth', 'User', 'MenuItems',
function($scope, $firebase, FIREBASE_ROOT, Auth, User, MenuItems) {
    var ref = new Firebase(FIREBASE_ROOT);
    var refCart = ref.child('/cart/');

    $scope.numberItems = 0;
    var user = Auth.currentUser;
    $scope.item = MenuItems.items();
    console.log(MenuItems.items());

}]);