Angular Firebase ng返回[object object]

时间:2018-04-19 21:31:10

标签: angular firebase ngfor

数据库

List = [1, 2, 3, 4, 5]
# input() only works for Python 3.x . Use raw_input() if using python 2.x
InputName = input("Please enter a name: ")
Usernames = [InputName + str(entry) for entry in List]
print(Usernames)

file= open("Text.txt","w+")
for username in Usernames:
   file.write(username)
file.close()

功能:

"testTree" : {
"-L7SdD-wGoFfewfde2oI" : { //Firebase key
  "testX" : {
    "ef43E2Vde" : { // User Generated
      "testY" : {
        "numX" : 87,
      }
    },
    "Me5Eq2V9e" : { // User Generated
      "testY" : {
        "numX": 12
      }
    }
  },
  "treeName" : "TestTREE",
},
"-L7heD-VdO9efgDaIOp" : {
  "testX" : {
    "9vEf029QP" : {
      "testY" : {
        "numX" : 35,
      }
    }
  }
},

}

HTML:

treeData: any[] = [];

getTree() {
this.db.list('/testTree/')
.valueChanges()
.subscribe(res => {
    Object.keys(res)
    .map(key => {
      this.treeData.push(res[key]);
      console.log(res[key]);
    })
})  

输出:

<div *ngFor='let userData of treeData'>
{{ userData.devices }} //typo
{{ userData.testX }}

从我的理解* ngFor将只迭代数组而不是对象。我以为我正在存储并将结果推送到我的数组treeData。我只想输出所有的数字&#39;。我究竟做错了什么?甚至可以使用&#34; User Generated&#34;来迭代我的数据库。达到&#39; numX&#39;?

2 个答案:

答案 0 :(得分:0)

因此,如果您知道如何获得{"ef43E2Vde": { "testY": { "numX": 87, ...},正如您在评论中提到的那样,您只需要&#34;对待&#34;这个javaScript对象是为了获取你需要的数据。

例如,如果你Object.keys(userData.testX)[0],你会得到&#34; ef43E2Vde&#34;

更准确地说,您可以使用以下功能

function getAttributeByIndex(obj, index){
  var i = 0;
  for (var attr in obj){
    if (index === i){
      return obj[attr];
    }
    i++;
  }
  return null;
}

并致电getAttributeByIndex(userData.testX, 0),它将返回{&#34; numX&#34;:87,...}对象

答案 1 :(得分:0)

您可以尝试使用snapshotChanges()而不是valueChanges(),也可以在同一个json中获取id:

getTree() {
return this.db.collection('testTree').snapshotChanges().map(
    spapDoc => {
      return spapDoc.map(doc => {
        return {
          id: doc.payload.doc.id,
          ...doc.payload.doc.data()
        };
      });
    });
}