me voy a romper la cabeza con una piedra ^^"
tengo este codigo:
this.af.database.list('/Documentos', { preserveSnapshot: true }) .subscribe(snapshots => { snapshots.forEach(snapshot => { console.log(snapshot.key, snapshot.val()); }); }) Con eso extraigo todos los datos correctamente, pero ahora quiero agregar a una matriz de objetos o algo así (comencé hace unas semanas con Firebase + Angular2).
Quiero llenar esa matriz para cargar la [tabla inteligente ng2] y si estoy pensando parcialmente bien con una matriz correctamente formada, llenaré la tabla, pero no sé cómo. Espero que alguien pueda ayudar.
Si desea un mapa (objeto) con key: value , puede hacerlo fácilmente con Array.prototype.reduce() :
const map = snapshots.reduce((map, snapshot) => { map[snapshot.key] = snapshot.val(); }, {});Bueno, según el ejemplo: https ://akveo.github.io/ng2-smart-table/#/examples/using-filters...
(Puede encontrar el código fuente aquí: https://github.com/akveo/ng2-smart-table/blob/master/src/app/pages/examples/filter/basic-example-source.component.ts )
... tienes que poner tus datos en un objeto JSON:
settings = { columns: { id: { title: 'ID', filter: false, }, name: { title: 'Full Name', filter: false, }, username: { title: 'User Name', filter: false, }, email: { title: 'Email', filter: false, } } }; data = [ { id: 1, name: 'Leanne Graham', username: 'Bret', email: 'Sincere@april.biz', }, { id: 2, name: 'Ervin Howell', username: 'Antonette', email: 'Shanna@melissa.tv', } ];"configuración" contiene los nombres de sus columnas y "datos" deben coincidir con las columnas de "configuración".
Sería más fácil si supiéramos un poco más de su código (columnas de su tabla + datos devueltos por su servicio), pero supongo que algo así funcionaría:
data = []; this.af.database.list('/Documentos', { preserveSnapshot: true }) .subscribe(snapshots => { snapshots.forEach(snapshot => { data.push( { [snapshot.key]: snapshot.val() } ); }); })Tenga en cuenta que esto creará una matriz JSON con solo una clave/valor por fila. Necesitamos saber más sobre sus datos para darle una respuesta adecuada.
Ok, encontré la solución con un simple Array() x)
this.af.database.list('/Documentos', { preserveSnapshot: true }) .subscribe(snapshots => { snapshots.forEach(snapshot => { let length = todo.documentos.push(snapshot.val()); // documentos is an array in the class todo.source.load(todo.documentos); }); });