Я пытаюсь установить фильтр на панели поиска на Ionic 4 с Firestore, у меня много проблем с отображением или скрытием списка панели поиска, я пытаюсь показать список с результатами, только если я что-то пишу или удаляю на панели поиска, но я не знаю, как обращаться со списком, в HTML, я настроил показывать его, когда "isResult = false".
export class Tab1Page {
private objCollection: AngularFirestoreCollection
objs: Observable<any>
listTitles: any[]
title
selectedTitle
isResult: boolean = false;
constructor(private af: AngularFirestore,
private db: AngularFireDatabase,
private service: objService) {
this.loadListobjs()
}
ngOnInit() {
}
filter(event) {
this.initializeListSearch();
const search = event.target.value
if (search && search.trim() != '') {
console.log(this.listTitles)
this.listTitles = this.listTitles.filter(title => {
return title.toLowerCase().indexOf(search.toLowerCase()) > -1;
})
} else {
this.isResult = false
this.loadListobjs();
}
}
initializeListSearch() {
const getAllTitles = []
firebase.firestore().collection("objs")
.get()
.then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
getAllTitles.push(doc.data().title)
});
}).catch(function (error) {
console.log("Error getting documents: ", error);
});
this.listTitles = getAllTitles
}
selectTitle(title) {
this.selectedTitle = title;
this.isResult = true
if (this.isResult == true) {
this.objs = null
this.objs = this.af.collection('objs',
ref => ref.where("title", "==", this.selectedTitle))
.valueChanges(data => {
return data;
})
}
}
loadListobjs() {
this.objCollection = this.af.collection('objs',
ref => ref.orderBy('myorder', 'desc'));
this.objs = this.objCollection
.snapshotChanges().pipe(
map(actions => actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
}))
);
}
}