2014-04-23 4 views
0

저는 현재 AngularJS와 Firebase 사용법을 배우고 있습니다.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

오늘 아침에 새롭게 보았을 때, 나는 내 문제를 멋지게 해결하는 각도 파이어 문서에서 이벤트 부분을 완전히 놓쳤다는 것을 깨달았습니다. 여기에서 사용할 수 있습니다.

$scope.exercise = Exercise.find($routeParams.exerciseId); 
    var tasksRef = $scope.exercise.$child('tasks'); 
    tasksRef.$on("value", function(snap) { 
     console.log(snap.snapshot.value); 

     }); 

완전히 문제를 해결하는 방법에 $를 사용 :

1 나는 이런 식으로 뭔가를하고 결국.