我正在尝试将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;
});