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 под полем поиска соответствующим материалом из запроса.
Любая помощь будет принята с благодарностью ... следует ли мне подписаться на содержимое поля ввода, а затем обновить запрос из тела подписки?
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. Я обновлю это с помощью демонстрации, как только мне это удастся.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
name
, которое у вас есть, и почему оно не совпадает со свойствомsearch
, которое вы получили бы в своей реактивной форме. как ценность?