我似乎找不到从Firebase获取特定记录的方法

时间:2014-08-06 15:27:05

标签: angularjs firebase angularfire

这是我为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;

});

1 个答案:

答案 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月),所以如果你的代码基于比那些更旧的代码,那么它可能无法工作