我是Angular和Firebase世界的新手,所以我遇到了一个我无法解决的问题。
我想通过除id之外的自定义键来查找文档。所以我建立了一个服务:
import { Injectable } from '@angular/core';
import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap'
import { Product, ProductId } from './models';
@Injectable()
export class ProductsService {
productsCollection: AngularFirestoreCollection<Product>;
products: Observable<ProductId[]>;
product: Observable<Product>;
constructor(public afs: AngularFirestore) {
this.productsCollection = this.afs.collection<Product>('products');
}
getProduct(query) : Observable<Product> {
if(query.id) {
this.product = this.productsCollection.doc<Product>(query.id).valueChanges();
return this.product;
} else if(query.url) {
this.product = this.afs.collection<Product>('products', ref => ref.where('url', '==', query.url)
.limit(1)).valueChanges().flatMap(result => result);
return this.product;
}
}
}
getProduct(query)
函数应该能够以两种方式获取文档 - 通过id和doc
中的自定义唯一字段query: { 'url': 'CUSTOM KEY'}
但第二个不起作用。我想重新调整一个Observable文件,就像我在用id看时一样。我怎样才能做到这一点? 在当前代码中,我收到编译器错误。