В моей программе для выполнения поиска форма заполняется (с использованием реактивной формы), при отправке создается json с фильтрами и перенаправляется на другую страницу, отправляя фильтры в качестве параметра. На другой странице служба отдыха используется для окончательного отображения результатов.
Проблема возникает, когда пользователь нажимает кнопку «Назад» в браузере. При возврате на предыдущую страницу фильтры в форме не сохраняются. Есть способ убедиться, что эти фильтры поддерживаются.





Как насчет параметров маршрутизатора? Это делает вашу страницу закладкой и поддерживает кнопки браузера «назад» и «вперед».
http://localhost:4200/filter?input1=someData&input2=anotherData
Когда вы отправляете форму, вы также можете перенаправить на ту же страницу с параметрами.
Итак, если ваши пользователи нажмут «назад» один раз, они окажутся в форме поиска с фильтрами. Если они снова нажмут «назад», они будут в пустой форме.
если вы не хотите использовать параметры маршрутизатора, вы можете сохранить данные в localStorage или sessionStorage и снова заполнить фильтры ngOnInit
export class Something implements OnInit {
ngOnInit() {
if (localStorage.getItem('search') !== undefined) {
const filters = JSON.parse(localStorage.getItem('search'));
// Do someting with it
}
}
search(searchParams) {
// Save your filters before redirect
localStorage.setItem('search', JSON.stringify(searchParams));
// Your code
}
}
Как предложил Haytam95, используйте параметры (скорее queryParams). Но вместо перенаправления на одну и ту же страницу я делаю два перенаправления. В первом я использую replaceURL, чтобы заменить пустую форму. Таким образом, когда я возвращаюсь, я получаю форму с последним фильтром.
this.router.navigate([],
{
queryParams: {filters: btoa(JSON.stringify(filter)), page: 0 },
relativeTo: this.activatedRoute,
queryParamsHandling: 'merge',
replaceUrl: true
}).then(
() => {
this.router.navigate(['/pages/fallos/list'], { queryParams: {filters: btoa(JSON.stringify(filter)), page: 0 } });
}
);
Это не совсем то, что мне нужно, но это хорошие идеи. Параметр localstorage может быть решением, но необходимо добавить еще немного логики, чтобы избежать того, что при попытке выполнить новый поиск не будут отображаться предыдущие фильтры. Спасибо за ответ в любом случае