Как динамически перенаправить основные маршруты на ранее посещенные дочерние маршруты в Angular 8? - PullRequest
0 голосов
/ 22 января 2020

Я довольно новичок в Angular (я использую verion 8.2.14), поэтому я не уверен, какой подход выбрать для решения следующей проблемы:

Допустим, у меня есть главная панель навигации сверху с пунктами меню A, B и C, а для каждого пункта меню у меня есть нижняя панель навигации с подпунктами (например, a, b, c для A; d, e, f для B et c.), Который появляется при нажатии на соответствующий пункт главного меню. У каждого основного элемента есть свой собственный маршрут (например, / myapp / A / для элемента A), и у каждого подэлемента есть свой дочерний маршрут (например, / myapp / A / a для подэлемента a). Каждый из дочерних маршрутов будет генерировать загруженный ленивый компонент.

Вместо простого перенаправления каждого основного маршрута на дочерний маршрут по умолчанию (например, / myapp / A / -> default -> / myapp / A / а) я бы хотел перенаправить каждого из них на дочерний маршрут, который был выбран последним в этом главном элементе. Другими словами, я хотел бы сохранить состояние дочерних маршрутов для каждого из основных маршрутов A, B, C. Если основной маршрут посещается впервые, он должен перенаправить на дочерний маршрут по умолчанию. В любом другом случае он должен перенаправить на ранее посещенный дочерний маршрут.

Например:
нажмите A -> / myapp / A -> default -> / myapp / A / a (сохранить состояние a для A)
нажмите b -> / myapp / A / b (сохраните состояние b для A)
нажмите B -> / myapp / B -> по умолчанию -> / myapp / B / a (сохранить состояние a для B)
нажать f -> / myapp / B / f (сохранить состояние f для B)
нажать A -> / myapp / A / -> состояние -> / myapp / A / b
нажмите B -> / myapp / B / -> состояние -> / myapp / B / f

Так как это, похоже, довольно распространенный шаблон навигации в разработке программного обеспечения, я полагаю, есть решение «из коробки», предоставленное Angular для решения этой проблемы? Конечно, можно просто сохранить текущие состояния вкладки (например, с помощью ActivatedRouteSnapshot) в службе (либо в кеше, либо в локальном хранилище браузера, в зависимости от того, хотите ли вы сохранить состояние), но я сомневаюсь, что это наиболее элегантно решение.

...