У меня есть ряд фильтров флажков в моем приложении Angular, которые при нажатии пользователем в представлении должны запускать функции, которые запрашивают API для возврата отфильтрованных результатов. У меня эти фильтры работают при использовании по одному. Однако мне трудно понять, как структурировать функцию, чтобы она могла содержать ВСЕ выбранные в данный момент фильтры. Вызов функции использует функцию Mongoose/MongoDB, которая позволяет нам передавать пары ключ/значение, соответствующие полям, непосредственно в полезную нагрузку почтового запроса.
Это то, что у меня было изначально (это работает, но только при обработке одного фильтра за раз с помощью операторов if/else). В основном это говорит о том, что если «тип» имеет значение «lan», то присвойте значение соответственно. И если значение не указано (т. е. пользователь отменил выбор всех фильтров), просто отправьте запрос на вызов API, не включая какие-либо введенные параметры (последнее «еще» здесь):
onFilterReceived(value, type) {
if (type === 'lan' && value) {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting",
"languages.primary" : { $in: value }
});
} else if (type === 'zip' && value) {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting",
"zipCode" : { $in: value }
});
} else {
this.filtersService.getByFilter(this.page, this.pagesize, {
"services.workflow.status" : "consulting"
});
}
Я получаю как «значение», так и соответствующий «тип», отправленный через Angular Output() и EventEmitter(), например:
<list [records]="records"
(sendLanguage)="onFilterReceived($event, type = 'lan')"
(sendZipcode)="onFilterReceived($event, type = 'zip')">
</list>
Опять же, все вышеперечисленное работает как есть.
Однако то, что я пытаюсь сделать, это построить эту функцию таким образом, чтобы, когда полученное значение имеет тип «lan», соответствующее «значение» в этом случае применялось к «значению» здесь:
"languages.primary" : { $in: value }
И затем, когда полученное значение имеет соответствующий тип «zip», это «значение» затем применяется к «значению» здесь:
"zipCode" : { $in: value }
Конечная цель состоит в том, что я смогу отправить запрос через API, который содержит значения нескольких фильтров ОДНОВРЕМЕННО.
Я пробовал множество составов, но до сих пор не смог заставить это работать так, как хотелось бы. Я использовал операторы if/else, как указано выше, но опять же, это позволит мне хранить значение только из одного фильтра за раз. Как я могу убедиться, что я передаю каждое из выбранных в данный момент значений фильтра?
Если бы кто-то мог предоставить хотя бы базовый пример того, как сформулировать такую логику, это было бы очень полезно.