如何在AngularJS控制器中访问firebase对象

时间:2014-03-31 14:05:01

标签: angularjs firebase angularfire

在将其发送到视图之前,我想对我的火力计数据INSIDE MY CONTROLLER进行一些简单的字符串比较,计算和过滤。我似乎无法弄清楚如何访问firebase对象中的数据。

这是我的firebase对象&test;' + $ 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!');
        }
    }
}])

我在这里缺少什么? 我也尝试使用OrderByPriority过滤器将firebase对象转换为数组,但没有成功。

1 个答案:

答案 0 :(得分: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!');
           }
        }
    });
}])