angularfire,检索数据的回调

Con*_*ror 7 javascript angularjs firebase angularfire

我想在恢复我的firebase数据后调用一个函数,但是,我没有看到任何promises函数就像ref对象那样.有什么建议吗?这是我的代码:

angular.module('myMod', ['firebase']).controller('myCtrl', ['$scope', '$firebase',
    function($scope, $firebase) {
        var ref = new Firebase('myfirebaseurl');

        $scope.data = $firebase(ref);

        // i want to do something like
        data.then(function(){
           someFunc();
        });

        // or something like
        $scope.$watch('data', function(){
            if($scope.data.desiredProperty) {
              doSomething();
            }
        });
    }]);
Run Code Online (Sandbox Code Playgroud)

ajk*_*ajk 0

AngularFire 为“已加载”和“已更改”事件提供事件处理程序。来自带注释的来源

object.$on = function(type, callback) {
  switch (type) {
  case "change":
    self._onChange.push(callback);
    break;
  case "loaded":
    self._onLoaded.push(callback);
    break;
  default:
    throw new Error("Invalid event type " + type + " specified");
  }
};
Run Code Online (Sandbox Code Playgroud)

所以你应该能够做这样的事情:

var ref = new Firebase('myfirebaseurl');

$scope.data = $firebase(ref);

$scope.data.$on('loaded', function(){
    if($scope.data.desiredProperty) {
      doSomething();
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑:

看起来当 AngularFireloaded事件触发时,该$scope.data对象尚未完全填充。这似乎是一个已知问题,但有一些方法可以解决它。

访问数据作为loaded回调函数的参数:

$scope.data.$on("loaded", function(data) {
  console.log(data);
}
Run Code Online (Sandbox Code Playgroud)

完全跳过 AngularFire 并直接使用 Firebase API:

ref.on("value", function(data) {
  console.log(data.val());
}
Run Code Online (Sandbox Code Playgroud)