【问题标题】:angular controller/factory returns undefined object角度控制器/工厂返回未定义的对象
【发布时间】:2014-12-27 04:12:18
【问题描述】:

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

我正在尝试使用工厂 .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;
              });
            }
          };
});

控制器:

'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());

}]);

【问题讨论】:

标签: javascript angularjs firebase


【解决方案1】:

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

return itemObj; 在事件回调中,不会传递给items

我不是 Firebase 方面的专家,但我想您需要使用 Promise 来让这个场景适合您。我搜索了一下,发现有一个适用于 AngularJS 的 Firebase 版本。

查看链接:https://www.firebase.com/blog/2013-03-29-firebase-bindings-for-angular.html

还有这个链接:http://tamas.io/angularjs-firebase-angularfire/

【讨论】:

  • 我应该把它放在哪里?我试着把它带到外面:return { items: function() { refMenu.child(today).on('value', function(snapshot) { itemObj = snapshot.val(); console.log(itemObj.name); }); return itemObj; } };
  • 我无法使用这些命令使其正常工作,但我确实意识到我使用的是过时版本的 angularFire 和 firebase。 updated AngularFire 调用使从 firebase 获取数据变得更加容易,因此应该这样做。谢谢杰。
猜你喜欢
  • 1970-01-01
  • 2017-03-12
  • 2013-08-16
  • 1970-01-01
  • 2016-03-11
  • 2020-12-18
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多