У меня есть система фильтрации, и эта часть отвечает за поиск предметов определенного статуса. Приведенный ниже код работал нормально, но мне пришлось изменить его на выбор ввода в соответствии с запросом.
<ul id = "dropdown-basic" *dropdownMenu class = "dropdown-menu" role = "menu" aria-labelledby = "button-basic">
<li role = "menuitem"><a (click) = "changeFilterStatus(null)" class = "dropdown-item">Kõik</a></li>
<li role = "menuitem"><a (click) = "changeFilterStatus('active')" class = "dropdown-item">Aktiivne</a></li>
<li role = "menuitem"><a (click) = "changeFilterStatus('temporarily_inactive')" class = "dropdown-item">Ajutiselt peatatud</a></li>
<li role = "menuitem"><a (click) = "changeFilterStatus('inactive')" class = "dropdown-item">Mitteaktiivne</a></li>
</ul>
Приведенный ниже код вызывает у меня затруднения. Вариант с [value] = "null" по-прежнему отправляет HTTP-запрос на url/clients?status=null вместо url/clients.
Приведенный выше код работал нормально, параметры добавляются, если существуют фильтры. В случае "null" фильтр не должен применяться и показывать элементы всех статусов.
<select (change) = "changeFilterStatus($event.target.value)" class = "form-control">
<option [value] = "null">Kõik</option>
<option [value] = "'active'">Aktiivne</option>
<option [value] = "'temporarily_inactive'">Ajutiselt peatatud</option>
<option [value] = "'inactive'">Mitteaktiivne</option>
</select>
Это функция changeFilterStatus
changeFilterStatus(status) {
if (this.filterStatus !== status) {
this.filterStatus = status;
this.filter.status = status;
this.getFilteredClients();
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете оставить значение опции пустым:
<option [value] = "">Kõik</option>
Это устанавливает значение как "Kõik"
Ну тогда просто проверьте status != null в своих функциях
Почему бы вам просто null не проверить это?
changeFilterStatus(status) {
if (status && this.filterStatus !== status) {
this.filterStatus = status;
this.filter.status = status;
this.getFilteredClients();
}
}
Однако мне все еще нужно отправить ноль, поэтому он знает, что возвращать.
Если status равно null, не отправляйте параметр status
Вы можете сделать что-то вроде
changeFilterStatus(status) {
// Status is null
if (!status) { \\ Call the url as it is without status }
else { \\ Call the url passing the status }
}
вы можете использовать ngModel
<select [(ngModel)] = "selectedValue" (change) = "changeFilterStatus(selectedValue)" class = "form-control">
<option [value] = "null">Kõik</option>
<option [value] = "'active'">Aktiivne</option>
<option [value] = "'temporarily_inactive'">Ajutiselt peatatud</option>
<option [value] = "'inactive'">Mitteaktiivne</option>
</select>
В вашем веб-сервисе:
import { Http,
Headers,
RequestMethod,
RequestOptionsArgs,
Response } from '@angular/http';
...
webServiceCall(status) : Observable<Response> {
if (len(status) > 0) { // Or status === "null" - I would change it to "" in markup too.
let options:RequestOptionsArgs = {
search : encodeParams(status);
}
result = this.http.request(url,options);
} else {
result = this.http.request(ur);
return result
}
Другие ответы, скорее всего, приведут к HTTP500 из-за url/clients?status=
Я использовал это:
changeFilterStatus(status) {
if (status === 'null') {
status = null;
}
if (this.filterStatus !== status) {
this.filterStatus = status;
this.filter.status = status;
this.getFilteredClients();
}
}
Я предполагаю, что раньше у меня было это в строковой форме, поэтому он работал с нулевым значением. У меня есть фильтр, который добавляет или удаляет параметры в/из URL-адреса в зависимости от того, являются ли они нулевыми или нет.
if (this.filterStatus != status) попробуйте использовать это .. в вашем первом коде вы отправляли null, теперь вы отправляете "null"