2015-08-28 64 views
2

帮助:火力地堡检索由密钥对象中的JavaScript API

我火力地堡的对象,因为关键是OBJECTID和文档API JS火力地堡不能从列表中恢复只有一个项目,它没有办法为我恢复。

你能帮我吗?

控制器

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); 
}, 

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

enter image description here

我需要列表对象数据。

的JavaScript API

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

回答

2

你应该使用Angularfire提供了使用火力地堡与AngularJS一些有用的方法首先。你可以在这里找到的文档:

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

现在,你的问题是如何使用它的密钥来访问的单个项目。您可以通过只提供链接到该对象检索时做的只是无论是$firebaseArray$firebaseObject(使用Angularfire API时):

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

,然后将该URL传递给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文档,因为它包含一些处理数据的好方法。

+0

我不想在Angular中创建工厂来处理Firebase为我带来的数据。 –

+0

@FrancisRodrigues嗯?我的回答不包括创建工厂。需要新的Firebase()才能将信息从数据库中提取出来。 – Chrillewoodz

+0

我用新图片更新了问题。 –