Javascript 如何从Firebase获取单个元素

Javascript 如何从Firebase获取单个元素,javascript,angular,firebase,google-cloud-firestore,Javascript,Angular,Firebase,Google Cloud Firestore,我试图从Firebase中存储的集合中获取单个元素 我有集合名称和关键元素 我的获取方法如下: get(collectionName: string, key) { return this.db.collection(collectionName).doc(key).snapshotChanges(); } 但我无法显示数据 我已经试过这个了: getCollectionItem(collectionName: string, key) { return this

我试图从Firebase中存储的集合中获取单个元素

我有集合名称和关键元素

我的获取方法如下:

  get(collectionName: string, key) {
    return this.db.collection(collectionName).doc(key).snapshotChanges();
  }
但我无法显示数据

我已经试过这个了:

  getCollectionItem(collectionName: string, key) {

    return this.db.collection(collectionName).doc(key).valueChanges().
    subscribe(objectItem => {
      console.log(objectItem);
      return objectItem;
    });

  }
return this.db.collection(collectionName).doc(key).valueChanges().
    subscribe(objectItem => {
      console.log(objectItem);
      return objectItem;
    });
控制台日志正确地显示了它。objectItem具有我想要的值

{desc: "Testing description", name: "Testing name", nameToSearch: "testing name", price: 20000}
desc: "Testing description"
name: "Testing name"
nameToSearch: "testing name"
price: 20000

我需要在此方法之外获取这些值,以便在模式中显示,但是
getCollectionItem
方法总是返回一个对象,我不知道如何获取控制台上显示的内容


有什么想法吗?

如果您使用Angular和Typescript,那么使用类型来理解以下问题总是很有用的:

  getCollectionItem(collectionName: string, key) {

    return this.db.collection(collectionName).doc(key).valueChanges().
    subscribe(objectItem => {
      console.log(objectItem);
      return objectItem;
    });

  }
return this.db.collection(collectionName).doc(key).valueChanges().
    subscribe(objectItem => {
      console.log(objectItem);
      return objectItem;
    });
假设此代码在您的服务中,这里的问题是您正在返回
订阅
,并且您还希望忽略
返回对象项
并只返回一个可观察值

在您的组件中,您应该订阅这个可观察的,并等待数据到达。看看这个:

服务:

  getCollectionItem(collectionName: string, key): Observable<any> {

    return this.db.collection(collectionName).doc(key).valueChanges();

  }

您的意思是希望通过使用字符串处理算法从Firestore接收的文本中获取信息吗?或(我还是不明白你的意思)不完全正确,但《不真实的帖子》澄清了问题所在。看一看!非常感谢。多谢各位!它解决了我的问题!还有一个问题:是否有任何方法可以订阅服务内部和访问阵列的组件中的可观察数据?是的,我不建议,但您可以订阅并保存服务中的数据,然后可以在注入服务的任何位置使用它。如果您没有从observable取消订阅,也可能导致内存泄漏(在我提供的解决方案中,您可以在组件卸载时取消订阅)