Держите примененные фильтры на браузере назад и вперед угловой 2
У меня есть страница списка продуктов, где у меня есть все данные, чтобы показать пользователю, если пользователь применяет фильтры, я фильтрую список на стороне клиента, используя Angular 2,
Теперь, если пользователь переходит на страницу сведений о проекте и нажимает кнопку браузера назад, все примененные фильтры исчезли, как и должно быть, но мне нужно реализовать так, чтобы на кнопке назад все примененные фильтры сохранялись.
Решения, которые я думаю: -
Подход : всякий раз, когда пользователь применяет фильтр, мы добавляем его в URL и перенаправление.
Проблема : на каждом URL будет вызываться API перенаправления.
Есть ли лучший способ, которым я могу подойти к этой проблеме ?
3 ответа:
Если вы хотите, чтобы критерии фильтра были видны в URL-адресе (и чтобы они были помечены), используйте параметры маршрутизатора и перенаправляйте на URL-адрес, содержащий обновленные параметры. При использовании
routerCanReuse() { return true; }, then the component is not even reloaded but just
вызывается routerOnReuse ()', где можно получить обновленные параметры.Если вы не хотите, чтобы критерии фильтра отображались в URL-адресе, используйте общий сервис для хранения параметров, тогда навигация не уничтожает значения параметров. Убедитесь, что поставщик услуг обеспечивает достаточно высокий уровень (
AppComponent
например) для того, чтобы он не был уничтожен, когда компонент будет уничтожен путем маршрутизации.
Хранение объектов в URL-адресе в качестве аргументов-это хороший подход, так как вы не зависите от скрытых состояний (глобальных переменных приложения) для построения представления.
Однако я бы не перехватывал компонент маршрутизации, а скорее использовал поддержку Angular для структурированных URL-адресов и фильтровал данные в методе onInit или всякий раз, когда он доступен.
У меня была аналогичная проблема с добавленным условием, что я должен был перенаправить пользователя обратно на страницу листинга с фильтрами, применяемыми, когда он использовал функцию сохранения. Подход, который я использовал, состоял в расчесывании как сервиса,так и фильтров в параметрах URL.
Причина для использования обоих, Вы можете войти на страницу сведений о продукте тремя способами:
- Из Списка Продуктов.
- непосредственно из URL.
- из какого-то другого, где вы могли бы дать ссылка.
И поэтому вы не можете просто использовать
this._location.back();
, так как вы не захотите перенаправлять на последнюю страницу во всех случаях. Поэтому мой подход состоял в том, чтобы сохранить последний URL-адрес в сервисе и в компоненте detail проверить, есть ли какой-либо сохраненный URL.Здесь важно проверить и вставить сохраненный URL-адрес в
ngOnInit()
, поскольку пользователь не всегда может нажать кнопку Сохранить.Прикрепляя код к сервису, он довольно прост.
@Injectable() export class ReturnHistoryService { private _returnURL: string; saveReturnURL(returnURL: string) { this._returnURL = returnURL; } popReturnURL() { let returnURL = this._returnURL; this._returnURL = null; return returnURL; }
`
Убедитесь, что поставщик не является per деталь.