Angular отправляет нулевой параметр. Это не должно

У меня есть система фильтрации, и эта часть отвечает за поиск предметов определенного статуса. Приведенный ниже код работал нормально, но мне пришлось изменить его на выбор ввода в соответствии с запросом.

<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();
    }
  }

if (this.filterStatus != status) попробуйте использовать это .. в вашем первом коде вы отправляли null, теперь вы отправляете "null"

MSD 19.02.2019 08:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
69
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете оставить значение опции пустым:

<option [value] = "">Kõik</option>

Это устанавливает значение как "Kõik"

eixcs 19.02.2019 09:05

Ну тогда просто проверьте status != null в своих функциях

Pavel Glebov 19.02.2019 09:24

Почему бы вам просто null не проверить это?

changeFilterStatus(status) {
    if (status && this.filterStatus !== status) {
      this.filterStatus = status;
      this.filter.status = status;
      this.getFilteredClients();
    }
  }

Однако мне все еще нужно отправить ноль, поэтому он знает, что возвращать.

eixcs 19.02.2019 09:11

Если 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-адреса в зависимости от того, являются ли они нулевыми или нет.

Другие вопросы по теме