javascript - 如何在 Firestore 数据库中检索 document.id?

标签 javascript angular firebase google-cloud-firestore

我对 Angular、Firestore 和 Firebase 很陌生。

我有一个组件可以获取我所有的英雄文档。我设法获取了所有英雄并将他们的名字列在列表中。我现在正在尝试获取 hero.id,以便我可以将该 id 传递给我的路由组件并显示该英雄的详细 View 。虽然我无法获得 hero.id。如何获取文档 ID?

我试着简单地做:hero.id 但它似乎不起作用???

heroes.component.ts:

import { Component, OnInit } from '@angular/core';
import { AngularFirestore } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  heroes: Observable<any[]>;

  constructor(db: AngularFirestore){
    this.recipes = db.collection('heroes').valueChanges();
  }

  ngOnInit() {
  }
}

heroes.component.html

<ul>
  <li class="text" *ngFor="let hero of heroes | async">
    <a routerLink="/hero/{{hero.id}}">{{hero.name}} -> id: {{hero.id}}</a>
  </li>
</ul>

非常感谢任何帮助!谢谢! :)

最佳答案

ID 在记录的元数据中。可以使用 snapshotChanges() 接收元数据(您使用 valueChanges())。

this.recipes = db.collection('heroes').snapshotChanges().map(actions => {
  return actions.map(a => {
    const data = a.payload.doc.data();
    const id = a.payload.doc.id;
    return { id, ...data };
  });
});

现在您的 observable 广播对象也带有 id 属性,您可以像现在一样使用 async 管道。

关于javascript - 如何在 Firestore 数据库中检索 document.id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50078935/

相关文章:

javascript - 调用 f :selectitems 的 Javascript 函数 onchange

javascript - 我们如何将多个参数传递给 PageMethod 的 onSuccess 方法?

javascript - 无法将变量输入到 Firebase 时间戳内的日期构造函数中?

javascript - 如果 JS 函数包含在 HTML 中,我如何在浏览器控制台中显示所有 JS 函数?

javascript - 创建多边形时使用 MVC 数组

html - 你如何在 Angular 中正确对齐所有内容?

node.js - Angular 6 HttpClient - CORS 问题

typescript - 在 Typescript 中声明 JSON 对象的正确方法

oauth-2.0 - 将 Firebase Google OAuth 身份验证限制为特定用户

ios - 使用 Firebase 和 Swift 3 结构化数据以比较值