我正在尝试将Firebase数据记录到控制台。但是我一直收到错误undefined is not a function。完整错误如下:

TypeError: undefined is not a function
at Object.childAdded (http://localhost:9000/scripts/services/ProviderService.js:11:22)
at new <anonymous> (http://localhost:9000/scripts/controllers/main.js:118:19)


这是我的代码当前的样子:

ProviderService.js

angular.module('outcomesApp').service('ProviderService', function(FBURL, $q, $firebase) {
  var providerRef = new Firebase(FBURL).child('providers');
  var fireProvider = $firebase(providerRef).$asArray();

  return {
    childAdded: function childAdded(cb) {
      fireProvider.$on('child_added', function(data) {
        console.log(data);
      });
    },
    ...


main.js

app.controller('MainCtrl', function ($scope, $filter, $timeout, $firebase, FBURL, ProviderService) {
  ProviderService.childAdded(function(addedChild) {
    $scope.providers.push(addedChild);
  });
  ...


该行发生错误:fireProvider.$on('child_added', function(data) {

最佳答案

您使用的是AngularFire的过时版本。该版本看起来像0.7,从0.8开始,已经进行了很多更改。 .$on方法不再存在,所以这就是为什么您收到未定义的错误的原因。现在,使用新版本的Firebase,您可以使用新的API将代码重构为几行。

当需要管理集合时,请使用新的.$asArray()方法。

在0.8更新中,.$on()已被删除,并使用.$asArray().$asObject替换。

以前,我们必须使用.$on()来收听添加到集合中的子级。现在,使用.$asArray()我们可以自动更新集合。

angular.module('example').controller('MainCtrl', function($scope, $firebase) {
  var ref = new Firebase('<your-firebase>');

  // using $asArray we automatically have child_added handled for us
  $scope.items = $firebase(ref).$asArray();
});


您也可以轻松地将此数据放入Factory。

angular.module('example').factory('Items', function($firebase) {
  var ref = new Firebase('<your-firebase>');
  return $firebase(ref).$asArray();
});

angular.module('example').controller('MainCtrl', function($scope, Items) {
  $scope.items = Items;
});

10-07 20:15