【发布时间】:2016-10-23 13:12:33
【问题描述】:
我有一个单独的模型和一个用于教师列表的控制器。
我的teacherModel.js 是:
app.factory('Teacher', [function() {
function Teacher(teacher) {
// constructor
};
Teacher.prototype = {
setTeacher: function(teacher) {
angular.extend(this, teacher);
},
getAllTeachers: function(callback) {
var scope = this;
var ref = firebase.database().ref('/xxx/teachers');
ref.once('value').then(function(snapshot) {
teachersList = snapshot.val();
scope.setTeacher(teachersList);
// THERE'S A PROBLEM HERE...
// I'm trying to pass this callback from the controller:
callback;
});
}
};
return Teacher;
}]);
现在我从我的控制器调用带有回调函数的getAllTeachers() 方法:
app.controller('teacherMainCtrl', ['$scope', 'Teacher', function($scope, Teacher){
var teacher = new Teacher()
teacher.getAllTeachers(function() {
$scope.teachers = teacher;
console.log($scope.teachers);
});
}]);
问题是console.log($scope.teachers); 没有向控制台记录任何内容。我认为根本没有执行回调。
在从 Firebase 异步检索数据后,有人可以帮我找出我做错了什么,或者建议一种更好的方法来从控制器向模型数据添加功能吗?谢谢。
【问题讨论】:
-
您可以简单地在 getAllTeachers() 中使用
return ref.once('value);,因为它会返回一个承诺并取消回调,以便在您的控制器中,您只需调用 teacher.getAllTeachers().then(function ( snapshot) { // 分配快照});评估承诺的结果。
标签: javascript angularjs firebase callback firebase-realtime-database