#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 для возврата без восстановления каких-либо параметров.