Firebase和非法调用

时间:2016-03-02 15:07:37

标签: angularjs google-chrome firebase runtime-error

有没有人知道为什么我的代码会出现非法调用错误?我认为这是因为我试图将一个配置文件图像注入我正在获取的对象中 - 在行addedCard.image = userInfo.image;但我不知道如何修复它。而且因为它是firebase监听器的一部分,它是一个连续的错误循环,并且它们不断加起来。这是我的代码:

我的服务:

service.cardAdded = function(cb){
        // if(target === "all"){
            if($rootScope.validID){
            prayersRef.orderByChild("group").equalTo($localStorage.seedUser.id).on('child_added', function(snapshot){
                var val = snapshot.val();

                cb.call(this, {
                    to: val.to,
                    from: val.from,
                    date: val.date,
                    assigned: val.assigned,
                    group: val.group,
                    passage: val.passage,
                    id: snapshot.key()
                });
            });
        }
};

我的控制器:

myService.cardAdded(function(addedCard){
        $scope.card.push(addedCard);
          ProfileService.retrieveName(addedCard.assigned,function(userInfo) {
            if (userInfo.image) {
              addedCard.image = userInfo.image;  //I think that this is causing the error
            };
          });
      });

这是错误:

TypeError: Illegal invocation
at isArrayLike (angular.js:266)
at forEach (angular.js:322)
at copy (angular.js:832)
at copy (angular.js:798)
at copy (angular.js:838)
at copy (angular.js:798)
at copy (angular.js:820)
at copy (angular.js:790)
at copy (angular.js:838)
at copy (angular.js:798)
(anonymous function) @ angular.js:11706
(anonymous     function) @ angular.js:8619
(anonymous function) @ angular.js:16417
completeOutstandingRequest @ angular.js:4940
(anonymous function) @ angular.js:5328

任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

AngularJS的这个指导可能很有用:

  
    

来自JS代码的低级DOM操作......对于AngularJS来说是禁忌

  

  
    

如果你坚持操纵数据模型,angular.copy就可以了。

  

https://github.com/angular/angular.js/issues/8353

您的代码隐式调用angular.copy(您可以在Chrome错误中看到),因此请确保您只复制数据模型,而不是整个DOM元素。

您是否尝试过只将userInfo.image中需要的元素分配给addedCard.image,而不是像这样复制整个对象?

addCard.image = new Card(userInfo.image);

function AddCard(userImage) {
  var obj = {     
    // Assign the needed attributes
  };
  return obj; 
}