Как обрабатывать несколько queryParams в Angular2
Я пытаюсь реализовать механизм фильтрации в новом приложении Angular2, который позволил бы мне отфильтровать список записей в массиве. Записи могут иметь около 20 свойств, по которым можно фильтровать. До сих пор я создал список фильтров в одном компоненте, а затем компонент списка, который направляется как дочерний. Затем я планировал передать фильтры как queryParams через маршрутизатор. Начиная с одного фильтра, это было нормально:
На стороне отправки у меня было:
this.router.navigate(['/findlist'], {queryParams: {'g': myParam}});
На приемной стороне у меня было:
this.subscription = this.route.queryParams.subscribe(
(queryParam: any) => this.myFilter = queryParam['g']
);
Затем я передаю myFilter в трубу фильтра для сопоставления и фильтрации. Пока все в порядке.
Тем не менее, я не могу понять, как увеличить это, чтобы учесть несколько потенциальных параметров, большинство из которых были бы пустыми / не нужны.
Я могу себе представить, что мне нужно было бы определить массив, содержащий ВСЕ активные фильтры через queryParam, но единственная документация, которую я могу найти, только когда-либо показывает примеры только с одним переданным параметром. Я пытался поиграть с:
{queryParams: { pass an array here! }}
Но моя среда IDE регистрирует ошибку, если я помещаю что-либо, кроме пары ключ: значение.
Я мог бы просто добавить все возможные фильтры и их значения каждый раз, но это каждый раз создавало бы тупо длинную строку URL, с большинством значений пустыми или Все и т. Д., Не очень красивыми.
Поэтому я считаю, что мой рабочий процесс должен состоять в том, чтобы на стороне отправки я поддерживал массив всех фильтров и их состояний, а затем каждый раз, когда нажималась одна из кнопок фильтров, я сначала обновлял соответствующее значение в массиве, а затем передавал весь массив. через queryParams.
На приемной стороне мне нужно как-то получить и обработать Param как массив, а затем извлечь каждую запись как переменную для последующей обработки в фильтре. Я также хочу быть СУХИМЫМ, поэтому на самом деле не хочу, чтобы несколько операторов на стороне приема эффективно делали одно и то же для разных свойств, упрощенно вместо этого имеет смысл циклически перемещаться по массиву.
Я надеюсь, что это имеет смысл, я был бы признателен, если у кого-нибудь есть предложение, даже если это означает передачу данных другим способом. Например, сейчас я смотрю, могу ли я просто передать данные, создав отдельную службу фильтрации и передав ее с помощью @Input.
Любые идеи с благодарностью приняты (самоучка-любитель, поэтому, вероятно, упускает что-то очевидное!)
Спасибо
Тони