Я пытаюсь создать динамическую c форму поиска на веб-сайте с Angular 8, где пользователь может использовать различные выпадающие меню, чтобы выбрать, что искать в Firestore. В зависимости от различных вариантов, у меня есть функция, которая создает строку, которая имеет ту же форму, что и запрос, хотя это строка. Но я не могу понять, как потом использовать его вместе с valueChanges()
, как я хочу, так как это все еще строка. Возможно ли это?
Я полагаю, что это не очень элегантный (если вообще возможный) способ выполнения динамических c запросов, но если это возможно, я думаю, что это сэкономит мне драгоценное время в данный момент. , (Я также видел, как создавать фильтры с BehaviourSubjects и switchMap
, поэтому я думаю, что это другой (лучший?) Способ, если это не работает.)
async getRealTimeData(value) {
this.query = await this.makeQuery(value);
this.data = this.query.valueChanges();
}
async makeQuery(value) {
var collection: string;
switch (value.collection) {
case 'X':
collection = 'X';
this.queryString = ".where('datetime', '>=', '2020-01-15T09:51:00.000Z')";
break;
case 'Y':
collection = 'Y';
this.queryString = ".orderBy('ID', 'asc')";
break;
}
// If Z chosen, add to search string
if (value.Z) {
this.queryString = this.queryString.concat(".where('Z', '==', value.Z)");
}
// If not viewAllUser, add list of permitted
else if (this.authService.viewAllUser == false) {
this.queryString = this.queryString.concat(".where('ID', 'in', this.permitted");
}
this.queryString = this.queryString.concat(".orderBy('datetime', 'desc')");
// If realtime, add limit to search string
// (If download: no limit)
if (this.searchType == "realtime") {
this.queryString = this.queryString.concat('.limit(100)');
}
this.query = this.query.concat(this.queryString).concat(')');
console.log('Query: ',this.query);
return this.query;
}