AngularJS:使用带有firebase的promises

时间:2014-04-23 13:56:47

标签: angularjs firebase angularfire

我目前正在学习如何使用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

任何建议都将不胜感激。

1 个答案:

答案 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方法完全解决了这个问题。