这让我很难过。我有一个方法来搜索Firestore数据库中的项目。当我直接从一次性测试中调用该方法时,它可以工作。当我从我的应用程序的另一部分使用完全相同的输入调用该方法时,它不起作用。
以下是进行搜索的方法:
getProductsStartingWithCategory(textSoFar: string): Observable<Product[]> {
console.log('searching for ', textSoFar);
let endAt = textSoFar + '\uf8ff';
let filteredCollection: AngularFirestoreCollection<Product> =
this.afs.collection('products', ref =>
ref.orderBy('materialType').limit(30).startAt(textSoFar).endAt(endAt)
);
return filteredCollection.snapshotChanges().map(changes => {
return changes.map(a => {
console.log('matched one', a);
const data = a.payload.doc.data() as Product;
data.id = a.payload.doc.id;
return data;
});
});
}
当我使用测试按钮从应用程序的第一页直接调用该方法时,它可以工作。该方法如下:
testTheThing() {
let text: string = 'Car';
this.productService.getProductsStartingWithCategory(text)
.subscribe(data => {
console.log('success', data);
});
}
同样,当我调用这种方法时,我得到了预期的结果(数据库中的材料匹配材料类型&#39;地毯&#39;。)成功!
但是,当我在应用程序的其他页面中使用该方法时,它不会返回任何结果。该页面有点复杂 - 本质上是在用户输入更改时调用该方法。以下是该方法的相关部分:
productCategoryChanged(productPurchase: ProductPurchase) {
if (productPurchase.materialType) {
console.log('searching for products starting with "' + productPurchase.materialType + '"');
let unsubscribe = this.productService.getProductsStartingWithCategory(productPurchase.materialType).subscribe(products => {
products.forEach(product => {
// logic goes here...
});
});
// rest of method omitted
在这两种情况下,我都会看到&#34;搜索汽车&#34;在console.log消息中。搜索文本完全相同。我已经尝试过多次使用大量不同的搜索文本(所有这些都在数据库中)。日志记录显示正在使用正确的输入调用方法,但由于某种原因,我只能在从&#34; test&#34;中调用它时找到结果。方法。那是为什么?
我试过修剪输入。我还有另一批产品&#39;连接到一个可观察的,但我不认为这很重要。我也已经为这个&#34;客户&#34;使用了这个确切的策略。搜索,这工作正常。这&#34;产品&#34;搜索几乎相同,但它不起作用。