1

對不起我的英語,我有這樣的觀察到:中提取數據到陣列

this.productos = af.database.list('/productos', { 
    query: { 
     orderByChild: 'categoria', 
     equalTo: this.catnombre 
    } 
    }); 

我需要從這裏設置一個數組中提取所有的ID,但我不知道怎麼了,謝謝。

編輯:

我可以提取的ID,但我使用去鍵,現在我需要提取的其他數據,但snapshot.val,不工作。

this.productos = af.database.list('/productos/', { 
    query: { 
     orderByChild: 'categoria', 
     equalTo: this.catnombre 
    }, preserveSnapshot:true 
    }); 

    this.productos.subscribe(snapshot => { 

     snapshot.forEach(snapshot => { 

      console.log(snapshot.key); 
      this.idproductos.push(snapshot.key); 

     }); 
     console.log(this.idproductos); 
    }); 

回答

2

所有你需要做的是

this.productos = af.database.list('/productos/', { 
    query: { 
     orderByChild: 'categoria', 
     equalTo: this.catnombre 
    }) 
    .map(products => products.map(product => product.$key)); 

結果將是可觀察到的按鍵陣列。現在你可以訂閱它或做任何你想要的東西。

this.productos.subscribe(keys => console.log("keys are", keys)); 

如果AngularFire,事情就是這樣FirebaseListObservable,正確使用,您不必擔心快照,或採取他們val(),或對他們做forEach,或服用元素並把它們到您自己的數組。 FirebaseListObservable是數組的可觀察值。只需要map它就可以創建其他可觀察對象,就像我們上面所做的那樣創建一個key數組的可觀察對象,或者訂閱它來獲取底層數據。

+0

問題是我需要這個數組爲其他功能,我不知道如何閱讀可觀察。 –

+0

我建議閱讀或重新閱讀關於觀察值的好教程。您通過訂閱它來「閱讀可觀察的內容」,然後對您傳遞給「訂閱」的處理程序中的數據進行處理。你可以在訂閱處理程序中做的一件事就是在某處存儲數據的副本,這很好,只要你記得在可觀察值開始觸發之前數據將不可用 - 對於AngularFire,直到數據已被檢索。 –

+0

好的,我明白了,我會試試,非常抱歉。 –