角度火:未定义不是一个函数($on方法不存在)
Angular Fire: undefined is not a function ($on method does not exist)
我正在尝试将我的 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)
这是我的代码当前的样子:
提供商服务.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);
});
},
...
主.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();
});
您也可以轻松地将这些数据放入工厂中。
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;
});
你想得到承诺数据吗?,我对Firebase了解不多,让我们试试这个。您有$q但没有被使用。如果此抛出错误,则与服务提供商有关。
function providerReference(){
var deferred = $q.defer(),
providerRef = new Firebase(FBURL).child('providers');
providerRef.then(function(d) {
var fireProvider = $firebase(d).$asArray();
deferred.resolve(fireProvider);
}, function(err) {
console.log('error')
});
return deferred.promise
}
return {
childAdded: function() {
return providerReference();
}
}
主要.js
$scope.providers = [];
ProviderService.childAdded().then(function(addedChild) {
$scope.providers.push(addedChild);
})
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟