Как реализовать кнопку «Назад» в Angular для перехода на предыдущую страницу?

#javascript #angular #typescript #routes

#javascript #angular #typescript #маршруты

Вопрос:

У меня есть list-component место, где я хочу сохранить pageIndex значение, установив некоторые переменные в другом классе непосредственно перед переходом, скажем, к другому компоненту x-component . Затем, при переходе обратно к list-component , я хочу получить ранее установленный pageIndex , чтобы открыть эту страницу вместо открытия первой страницы в таблице данных. Итак, каков альтернативный способ решения этой проблемы без использования сервиса или подраздела? Я могу использовать другой класс, но не сервис. Я попытался извлечь заданные значения из класса, но pageIndex при попытке его извлечения значение не определено.

Любая помощь будет оценена.

Ответ №1:

Вы также можете pageIndex использовать параметр URL-адреса страницы, на которой list-component отображается.

Введите свой ctor:

 private route: ActivatedRoute
 

Затем в вашем ngOnInit сделайте что-то вроде:

 this.route.params.subscribe((params: any) => {
    if (params.pageIndex) {
        this.pageIndex = params.pageIndex;
    }
});
 

В вашем модуле маршрутизации ваш URL-адрес должен соответствовать: some-url/:pageIndex . И при перелистывании вперед и назад в списке URL-адрес должен быть соответствующим образом обновлен.

Комментарии:

1. Спасибо, но я не уверен, где мне следует применять эти блоки кода. Вы имеете в виду, что для передачи всех параметров в параметры x-component маршрута и подписки list-component ?

2. @Fredrick нет, вам не нужно передавать параметры x-component , потому что при переходе назад указанная выше подписка на параметры URL гарантирует pageIndex получение последнего значения вместо сброса на первую страницу.

3. Спасибо, но где я должен установить pageIndex параметр? Когда я устанавливаю этот параметр в компоненте списка, а затем я не уверен, должен ли я передавать некоторые другие параметры из компонента details. Я использую this._location.back(); для перехода назад без передачи каких-либо параметров.

4. С другой стороны, мне интересно, что вместо передачи параметров из списка в детали, а затем повторного перехода из деталей в список, было бы лучше сохранить эти параметры в компоненте списка (возможно, через класс), а затем извлечь их из метода init списка без внесения каких-либо изменений в деталикомпонент?

5. Кстати, большое спасибо за вашу ценную помощь и проголосовали 😉

Ответ №2:

Вы можете использовать sessionStorage .

В x-component , сохраните pageIndex с этим.

 sessionStorage.setItem('pageIndex', pageIndex);
 

Затем загрузите это значение list-component следующим образом.

 public pageIndex = Number(sessionStorage.getItem('pageIndex') ?? 0);
 

Ответ №3:

 import { Location } from '@angular/common';

previousUrl: string;
constructor(private location: Location,private router: Router){ }

goBackFunction(){
router.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe((event: NavigationEnd) => {

      console.log('prev:', event.url);
      this.previousUrl = event.url;
});

 this.location.back()  
}
 

Это приведет вас на предыдущую страницу 🙂

Комментарии:

1. Как насчет получения параметров, которые были установлены ранее в list-component ?

2. @Fredrick Я отредактировал новый код, проверьте их

3. Я думаю, что есть недопонимание. Есть 2 компонента, и у меня есть некоторые параметры в компоненте списка. Затем перейдите к компоненту details. И при повторном возврате на страницу списка мне нужно получить ранее установленные параметры. Но вы только что предоставили реализацию компонента details для возврата без восстановления каких-либо параметров.