我正在尝试将新对象添加到我的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 = [];应该做这个工作吗?
答案 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方法。