【问题标题】:Cannot complete realtime search query无法完成实时搜索查询
【发布时间】:2019-10-30 00:04:28
【问题描述】:

HTML

<form [formGroup]="searchForm" onsubmit="return false" id="searchField" ng-submit="" \">
      <input type="text" placeholder="Search" formControlName="search" (keyup)="updateQuery()"/>

      <li *ngFor="let product of querySearch | async">
        {{ product.name }}
      </li>

</form>

表单生成器设置

this.searchForm = this.fb.group({
      search: ['', Validators.required],
    });
this.afs.collection<any>('name', ref => ref.where('name', '==', name));

我似乎无法创建此搜索栏。这个想法是,对于输入字段值的每次更改,firestore 查询都会更改为搜索“products/{id}”以检索名称值为 Brian 的所有产品。我似乎无法准确地创建代码,用来自查询的相关材料填充搜索字段下方的 li 。

任何帮助将不胜感激...我应该订阅输入字段内容,然后从订阅正文中更新查询吗?

【问题讨论】:

  • 所以问题中有一些缺失的部分。您如何存储来自您的 afs 查询的搜索响应,您拥有的 name 属性是什么,为什么它与您最终以反应形式作为值的 search 属性不同?

标签: javascript angular firebase google-cloud-firestore


【解决方案1】:

您实际上并不需要一个反应形式。只需使用 [(ngModel)] 就可以了。

来,试试看:

<input type="text" placeholder="Search" [(ngModel)]="search" (keyup)="updateQuery()"/>
<ul>
    <li *ngFor="let product of results$ | async">
        {{ product.name }}
    </li>
</ul>

在你的组件类中:

import { Component } from "@angular/core";
import { AngularFirestore, AngularFirestoreCollection } from "@angular/fire/firestore";
import { Observable } from "rxjs";

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent {
  results$: AngularFirestoreCollection<any>;
  search = '';

  constructor(private afs: AngularFirestore) {}

  ...

  updateQuery() {
    this.results$ = this.afs.collection<any>("items", ref =>
      ref.where("name", "==", this.search)
    );
  }
}

PS:我正在尝试创建 StackBlitz 来演示代码,但我在安装 firebase 依赖项时遇到了问题。我会尽快通过演示更新它。

【讨论】:

  • 谢谢...由于我的声誉,我无法投票,但请勾选
  • 别担心,伙计。很高兴我能帮忙:)
猜你喜欢
  • 2013-11-09
  • 1970-01-01
  • 2020-06-10
  • 2015-08-21
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多