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

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
5 454
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

sessionStorage.setItem('pageIndex', pageIndex);

Затем загрузите это значение в list-component вот так.

public pageIndex = Number(sessionStorage.getItem('pageIndex') ?? 0);
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.info('prev:', event.url);
      this.previousUrl = event.url;
});

 this.location.back()  
}

Вы попадете на предыдущую страницу :)

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

Jack 22.12.2020 07:47

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

Arokia Lijas 22.12.2020 08:01

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

Jack 22.12.2020 08:06

Помните, что в этом сценарии есть пограничный случай, когда пользователь открывает новую вкладку, в истории не будет записи, к которой можно вернуться. Это может вывести пользователя из приложения Angular, а также вызвать проблемы с безопасностью, поскольку нет API для прямой проверки истории браузера.

Ali Celebi 25.10.2022 15:23
Ответ принят как подходящий

Вы также можете использовать 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-адрес должен обновляться соответствующим образом.

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

Jack 22.12.2020 07:46

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

Benny 22.12.2020 07:51

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

Jack 22.12.2020 08:15

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

Jack 22.12.2020 08:17

Кстати, большое спасибо за вашу ценную помощь и голосование;)

Jack 22.12.2020 08:17

@Fredrick, pageIndex находится в URL-адресе, поэтому при возврате со страницы сведений (компонент) путем вызова location.back()list-component будет анализировать URL-адрес (как показывает мой код выше) и творить чудеса. Поэтому странице сведений не нужно получать/отправлять какие-либо параметры.

Benny 22.12.2020 08:26

На этот раз все в порядке. Но думаю параметры будут видны в адресной строке думаю. Это правда? Я избегаю этого и передаю параметры. Возможно ли это в вашем подходе?

Jack 22.12.2020 08:37

@Fredrick yes URL = адресная строка. Зачем избегать? Одним из плюсов включения его в URL-адрес является то, что если вы обновите страницу, вы получите правильный pageIndex. В противном случае он будет сброшен. URL-адрес помогает вам сохранить состояние

Benny 22.12.2020 08:40

Давайте продолжим обсуждение в чате.

Benny 22.12.2020 08:57

Как насчет метода back() на странице сведений? Как мне это реализовать?

Jack 22.12.2020 10:42

Другие вопросы по теме