AngularFire TypeError:Object#<object>没有方法'push'</object>

时间:2013-12-09 08:59:12

标签: javascript angularjs firebase angularfire

我正在尝试将新对象添加到我的firebase模型中。以下是我的Angularfire设置:

angular.module('angularApp', ['firebase'])
  .controller('MyCtrl', ['$scope', 'angularFire',
    function MyCtrl($scope, angularFire) {
      $scope.shapes = [];
      var ref = new Firebase('https://angular-starter.firebaseio.com/shapes');
      angularFire(ref, $scope, 'shapes');


      $scope.addShape = function () {
        console.log(typeof $scope.shapes);

        var newShape = {color: "#536993", height: 0, id: 1, left: 0, position: "absolute"};
         $scope.shapes.push(newShape);

      };
    }
  ])

我理解该对象没有推送方法,但我无法弄清楚如何将模型定义为数组对象。我以为$ scope.shapes = [];应该做这个工作吗?

2 个答案:

答案 0 :(得分:1)

使用angularFire将Firebase绑定到范围变量时,不能随意选择数据类型。 angularFire始终与模型(对象)一起使用,并将数据存储为对象。

如果您的远程数据具有完全数字和顺序键,则可以使用angularFireCollection来模拟类似行为的数组(尽管Firebase始终将数据存储为对象,即使在这种情况下也是如此),push()利用数组存储值。

请注意,即使在angularFireCollection的情况下,您也可能不会调用add(),而是需要使用内置的$add方法。

另请注意,angularFire 0.5即将来临(可能是下周),并会改善很多这些混淆。

<强>更新

AngularFire 0.5已发布,因此适当的方法现在是add而非{{1}},并且angularFire和angularFireCollection之间不再有区别。

答案 1 :(得分:0)

看起来Firebase将$ scope.shapes重置为对象。您可以使用

之类的对象方法

$ scope.shapes [index] = newShape;

存储数据而不是使用push方法。