帮助:
我是 Firebase 的一个对象,无法仅从列表中恢复一项,因为 key 是一个 objectId 和 doc api JS Firebase,它没有为我恢复的方法。
你能帮我吗?
Controller
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 API
最佳答案
首先,您应该使用 Angularfire,它提供了一些将 Firebase 与 AngularJS 结合使用的有用方法。您可以在这里找到文档:
https://www.firebase.com/docs/web/libraries/angular/api.html
现在,您的问题是如何使用它的 key 访问单个项目。您只需在检索 $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 文档,因为它包含一些处理数据的好方法。
关于javascript - Firebase 在 JavaScript Api 中按键检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32273477/