角度控制器/工厂返回未定义的对象
angular controller/factory returns undefined object
我是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());
}]);
代码的问题在于,在工厂中,items
函数将不返回任何内容,因为它会在附加事件处理程序后立即完成其执行。
return itemObj;
位于事件回调内,不会传递给items
。
我不是Firebase的专家,但我想你需要使用承诺来使这个场景为你工作。我用谷歌搜索,发现有一个用于AngularJS的Firebase版本。
检查链接:https://www.firebase.com/blog/2013-03-29-firebase-bindings-for-angular.html
还有这个链接: http://tamas.io/angularjs-firebase-angularfire/
相关文章:
- 在setInterval函数之前声明时未定义对象
- 使用+=运算符未定义对象中的第一个元素
- 通过 Requirejs 传递的未定义对象
- JS:防止访问未定义对象的属性时出错
- AngularJs为什么在ng禁用函数上未定义对象
- IE上未定义对象值
- JQuery函数返回一个对象,但它被集成为未定义对象
- AJAX响应带有未定义/对象文档
- 处理未定义对象的内联比三进制更聪明
- JavaScript错误未定义对象,尽管对象存在
- Javascript未定义对象
- 未定义对象子属性的Javascript类型
- Javascript多维数组未定义对象错误
- 在一条语句中获取多个未定义对象中的初始化对象
- Javascript -对象中的未定义对象
- 是否可以像扩展其他对象一样扩展未定义对象
- Java Script Ionic框架中的未定义对象
- if else子句中未定义对象的未定义属性
- 未定义对象方法
- 在JavaScript中使用typeof仍然会导致未定义对象的错误