显示angularfire2查询中的单个项目

时间:2016-10-14 08:38:27

标签: angular rxjs angularfire2

有没有办法在不使用ngFor循环的情况下显示angularfire2的查询?

this.user = this.af.database.list('items',{
  query: {
    orderByChild: 'id',
    equalTo: id
  }
})

我尝试使用所有这些输出HTML,但只有循环工作

{{user}}
{{user | async }}

{{user.name}}
{{user.name | async }}

<h1>{{ (user | async)?.name }}</h1>

<ul>
   <li *ngFor="let u of user  | async" >{{u.name}}</li>
</ul>

数据集是

{
  "items" : {
    "id-1" : {
      "id" : 1,
      "name" : "Gambit"
    },
    "id-2" : {
      "id" : 2,
      "name" : "Wolverine"
    }
  },
  "list" : "bob"
}

还通过将json输出到html来调试angularfire使用很简单,这似乎不能在angularfire2中工作,还有其他人这样做吗?

3 个答案:

答案 0 :(得分:5)

你可以用:

this.user = this.af.database.list('items',{
  query: {
    orderByChild: 'id',
    equalTo: id
  }
}).map((items: Array<any>) => items.find(item => item.id === id))

但我建议重新构建您的数据,如果您有id,您应该可以直接获取项目:

this.user = this.af.database.object(`items/${id}`)

查看官方文档:Structure Your Database了解更多详情......

答案 1 :(得分:2)

当然只有循环才有效,因为.list()会返回一个名称所暗示的列表。

AF2上还有一个.object()方法,你可以试试。

要在模板中输出json,您可以使用json管道:

users | async | json

答案 2 :(得分:0)

例如:

singleObject = this.db.object('/items/' + id).valueChanges();

然后是html

{{singleObject | json}}
{{items.id-1}}