Как получить доступ к объекту firebase в контроллере AngularJS

Я хочу выполнить несколько простых сравнений строк, вычислений и фильтрации данных моей базы данных ВНУТРИ МОЕГО КОНТРОЛЛЕРА, прежде чем отправлять их в представление. Я не могу понять, как получить доступ к данным внутри объекта firebase.

вот мой объект firebase в 'tests/'+$routeParams.id:

{
   "createdDate":"2014-03-30T18:04:28.927Z",
   "modified":"2014-03-30T18:04:28.927Z",
   "region":"shoulder",
   "step1":{
      "defined_incident":"no",
      "localized_or_referred":"localized",
      "recent_surgery":"no",
      "symptoms":"constant"
   },
   "title":"testtest",
   "user":"simplelogin:1"
}

вот мой контроллер:

.controller('TestCtrl', ['$scope', 'syncData', '$routeParams', function($scope, syncData, $routeParams) {

    syncData('tests/'+$routeParams.id).$bind($scope,'test');

    //this is where i want to access $scope.test 
    //and check if $scope.test.region is equal to 'shoulder', etc.

    if($scope.test.region.$value == 'shoulder') {
        if($scope.test.step1.localized_or_referred.$value == 'localized') {
            alert('Shoulder & Localized!');
        }
    }
}])

Что мне здесь не хватает? Я также пытался преобразовать объект firebase в массив с помощью фильтра OrderByPriority, но безуспешно.


person jpamorgan    schedule 31.03.2014    source источник


Ответы (1)


Ваша проблема в том, что ваш код, использующий значение $scope.test, вызывается слишком рано после $bind. Вам нужно дать приложению время для синхронизации с Firebase, до этого момента у вас не будет никаких данных.

Метод $bind возвращает обещание, которое будет разрешено после загрузки исходных данных из Firebase. Попробуйте что-то вроде этого:

.controller('TestCtrl', ['$scope', 'syncData', '$routeParams', function($scope, syncData, $routeParams) {
    syncData('tests/'+$routeParams.id).$bind($scope,'test').then(function () {
        //this is where i want to access $scope.test 
        //and check if $scope.test.region is equal to 'shoulder', etc.
        if($scope.test.region.$value == 'shoulder') {
            if($scope.test.step1.localized_or_referred.$value == 'localized') {
               alert('Shoulder & Localized!');
           }
        }
    });
}])
person Abe Haskins    schedule 31.03.2014
comment
Благодарю вас! Я знал, что это что-то простое. Это работает отлично. - person jpamorgan; 01.04.2014
comment
Я новичок в angular и firebase. Что делает syncData? Является ли он частью какой-либо библиотеки? - person Adam Youngers; 02.03.2016