2014-10-18 3 views
1

Когда я пытаюсь заменить $ add for push, я получаю эту ошибку.

TypeError: undefined is not a function 
at Scope.$scope.sendComment (http://localhost:9000/scripts/controllers/post.js:22:38) 
at http://localhost:9000/bower_components/angular/angular.js:10847:21 
... 

Вот мой контроллер @ post.js

16 $scope.sendComment = function() { 
17  var newComment = { 
18  user: $scope.currentUser, 
19  text: $scope.currentText 
20 
21  }; 
22  var promise = CommentService.add(newComment); 
23  promise.then(function(name) { 
24  console.log(name); 
25  }); 
26 }; 

Вот моя служба (проблемная функция добавить внизу списка)

(function(angular) { 
    'use strict'; 

    angular.module('codesApp').service('CommentService', function(FBURL, $q, $firebase) { 
    var commentRef = new Firebase(FBURL).child('comments'); 
    var fireComment = $firebase(commentRef); 
    return { 
     childAdded: function childAdded(limitNumber, cb) { 
     commentRef.startAt().limit(limitNumber).on('child_added', function(snapshot) { 
      var val = snapshot.val(); 
      cb.call(this, { 
      user: val.user, 
      text: val.text, 
      name: snapshot.name() 
      }); 
     }); 
     }, 
     add: function addComment(comment) { 
     return fireComment.$add(comment); 
     }, 
     .... 

Я застрял на всю ночь , Любая помощь очень ценится! Благодаря!

+0

Если не было бы 'обещание $. загружен(), а затем в строке 23? –

ответ

3

$ firebase (commentRef) получает только половину пути к массиву firebase, который может вызывать $ add().

Вы должны дополнительно позвонить $ asArray() на возвращаемое значение $ firebase (commentRef) как так:

var fireCommentArray = $firebase(commentRef).$asArray(); 

Тогда вы можете

fireCommentArray.$add(comment) 
+0

Отлично, это работает! Благодаря! –

Смежные вопросы