这是我为Firebase为应用程序构建的一项简单服务。我必须对一些元素进行评审,并且我已经确定我正在使用最新的版本的firebase和angular fire,因为它似乎正在快速变化。前几行很简单,
app.factory('Ship', function ($routeParams, $firebase, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL + 'ships');
问题从这里开始。根据我打算对firebase对象做什么,有时它需要是$ asObject,有时则不是。这取决于教程,最近的教程似乎表明
var shipsObj = $firebase(ref).$asObject(); // Is this necessary
var ships = $firebase(ref); // in the most modern version?
var Ship = {
all: shipsObj, // This works fine
create: function (ship) {
return shipsObj.$add(ship); // This also works fine
},
find: function (shipId) {
console.log($routeParams.shipId); // <--this ID appears as the correct numerical ID
然后,接下来的六行,其中没有任何工作。它们都会产生错误,表明它们未定义。
console.log(shipsObj.$child(shipId));
console.log(ships.$child(shipId));
console.log(shipsObj.$getRecord(shipId));
console.log(ships.$getRecord(shipId));
console.log(ships.$keyAt(shipId));
console.log(shipsObj.$keyAt(shipId));
},
我也不会厌倦多次重复下一个方法,但$remove
也不起作用。
delete: function (shipId) {
return ships.$remove(shipId);
}
};
return Ship;
});
答案 0 :(得分:6)
假设您使用AngularFire的v0.8,您将要使用$asObject()
或$asArray()
来获取实际数据。这是讨论v0.8中变化的官方博客文章:https://www.firebase.com/blog/2014-07-30-introducing-angularfire-08.html
因此,您可以通过其ID来访问船舶:
var shipsObj = $firebase(ref).$asObject();
console.log(shipsObj[shipId]);
您可能还想查看AngularFire的API文档:https://www.firebase.com/docs/web/bindings/angular/api.html
v0.8发生了很大变化,它刚刚问世(2014年7月),所以如果你的代码基于比那些更旧的代码,那么它可能无法工作