我目前正在学习如何使用AngularJS和Firebase。
我有一个结构,我已经设置了服务来处理与Firebase的交互,然后在不同的控制器中使用它。当我的代码开始尝试使用它时,我遇到了没有加载数据的问题。我环顾四周,在我看来,承诺是解决方案。
我有一个看起来像这样的控制器:
app.controller('ExercisesCtrl', function ($scope, $location, $routeParams, Exercise) {
$scope.setExercise = function () {
// set current exercise
$scope.exercise = Exercise.find($routeParams.exerciseId).then( function () {
// do something with the loaded data
});
一个看起来像这样的服务:
app.factory('Exercise',function ($firebase, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL + "exercises");
var exercises = $firebase(ref);
var exercise = {
all: exercises,
find: function (exerciseId) {
return exercises.$child(exerciseId)
}
};
return exercise;
});
我的问题是如何更改当前的解决方案,以便我可以使用.then或类似的东西,以确保我在加载之前不会开始处理数据。我不确定我是否应该更改服务以返回承诺?或者只是采用控制器等待数据加载?
这看似相关/相关,但不确定我是否应该将代码更改为该结构或如何从此处继续。 Difference between Firebase AngularFire implicit and explicit sync
任何建议都将不胜感激。
答案 0 :(得分:0)
今天早上看完它后,我意识到我完全错过了angularfire文档中的事件部分,这很好地解决了我的问题。它可以[这里]。1
我最终做了这样的事情:
$scope.exercise = Exercise.find($routeParams.exerciseId);
var tasksRef = $scope.exercise.$child('tasks');
tasksRef.$on("value", function(snap) {
console.log(snap.snapshot.value);
});
使用$ on方法完全解决了这个问题。