【问题标题】:Firebase retrieve Object by Key in JavaScript ApiFirebase 在 JavaScript Api 中按键检索对象
【发布时间】:2015-08-28 14:32:35
【问题描述】:

帮助:

我是 Firebase 的对象,无法从列表中仅恢复一项,因为键是 objectId 和 doc api JS Firebase,它没有为我恢复的方法。

你能帮帮我吗?

控制器

var rooms = Rooms.all();

        console.log('All Rooms:', rooms);
        console.log('Rooms length:', rooms.length);

        // New test room
        if (!rooms) {
            var objRooms = [
                {
                    cc: 'Business 1',
                    name: 'Chat 1',
                    city: 'Curitiba',
                    state: 'PR'
                },
                {
                    cc: 'Business 2',
                    name: 'Chat 2',
                    city: 'Floripa',
                    state: 'SC'
                }
            ]

            var objRoom = Rooms.save(objRooms);
            console.log('ROOMID: ', objRoom.key());
        }

服务

.factory('Rooms', function ($firebaseObject) {
        // Might use a resource here that returns a JSON array
        var ref = new Firebase(firebaseUrl);
        var rooms = $firebaseObject(ref.child('rooms'));

        return {
            all: function () {
                return rooms;
            },
            get: function (roomId) {
                // Simple index lookup

                console.log('ROOMD:', rooms);

                return rooms[ ref.child(roomId) ];
            },
            save: function (roomData) {
                var obj = ref.child('rooms');

                var onComplete = function (error) {
                    if (error) {
                        console.log('Data could not be saved: ', error);
                    }
                    else {
                        console.log('Data saved successfully!');
                    }
                };

                return obj.push(roomData, onComplete);
            }
        }
    })

输出:

Chat Controller initialized!
controllers.js:117 Object {params: Object, current: Object, $current: extend, transition: null}$current: extendcurrent: Objectget: (stateOrName, context)go: go(to, params, options)href: href(stateOrName, params, options)includes: includes(stateOrName, params, options)is: is(stateOrName, params, options)params: ObjectroomId: "-JxlCvzgbdkQfoA1Of78"__proto__: Objectreload: reload()transition: nulltransitionTo: transitionTo(to, toParams, options)__proto__: Object
services.js:78 Selecting the room with id: -JxlCvzgbdkQfoA1Of78
services.js:20 ROOMD: d {$$conf: Object, $id: "rooms", $priority: null}
app.js:43 Logged in as : simplelogin:2

工厂房间是个问题:

get: function (roomId) {
            // Simple index lookup

            console.log('ROOMS:', rooms);
            console.log('ROOM specified:', ref.child(roomId).key());

            return rooms[ ref.child(roomId) ];
        },

[更新]

我为过滤对象数据创建了工厂对象:

.factory('Objects', function () {
        return {
            filter: function (objectValues, objectKey) {
                // to take an action after the data loads, use the $loaded() promise
                objectValues.$loaded().then(function () {
                    // To iterate the key/value pairs of the object, use angular.forEach()
                    angular.forEach(objectValues, function (value, key) {
                        if (key === objectKey) {
                            console.log(objectValues[objectKey]);
                            return objectValues[objectKey];
                        }
                    });
                });
            }
        }
    })

Rooms工厂,我编辑了方法get并设置:

get: function (roomId) {
     return Objects.filter(rooms, roomId);
},

[更新] 我有一个基于图像的数据库:

我需要列表对象数据。

JavaScript 接口

https://www.firebase.com/docs/web/api/

【问题讨论】:

  • 请不要在问题标题中添加“已解决”:它将被社区回滚。

标签: javascript angularjs firebase


【解决方案1】:

首先你应该使用 Angularfire,它提供了一些有用的方法来使用 Firebase 和 AngularJS。你可以在这里找到文档:

https://www.firebase.com/docs/web/libraries/angular/api.html

现在,您的问题是如何使用它的密钥访问单个项目。您只需在检索 $firebaseArray$firebaseObject(使用 Angularfire API 时)时提供该对象的 url 即可做到这一点:

http://myfirebase.firebase.io/blazing-heat-9118/rooms/ + roomId

然后将此网址传递给new Firebase() 调用:

var ref = new Firebase('http://myfirebase.firebase.io/blazing-heat-9118/rooms/' + roomId);

var room = $firebaseObject(ref);

  // To take an action after the data has finished loading, use the $loaded() promise
obj.$loaded().then(function(res) {

  console.log(res); // res will be the room object

  // To iterate the key/value pairs of the object, use angular.forEach()
  angular.forEach(obj, function(value, key) {
    console.log(key, value);
  });
});

现在您已经从数据库中获取了单人房。

我建议通读 Angularfire 文档,因为它包含一些处理数据的好方法。

【讨论】:

  • 我不想在 Angular 中创建工厂来处理自己的 Firebase 可以为我正确带来的数据。
  • @FrancisRodrigues 嗯?我的回答不包括创建工厂。需要新的 Firebase() 才能从数据库中提取信息。
  • 谢谢@Chrillewoodz!我已经结束了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2017-09-27
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多