Передайте идентификатор маршрута верхнего уровня другим маршрутам верхнего уровня, как если бы они были дочерними маршрутами

У меня есть обзор проектов в качестве страницы входа.

Когда я нажимаю кнопку "Открыть проект", идентификатор проекта передается в представление "Вехи". Когда я нахожусь в представлении этапов, я хочу активировать представление Задач с идентификатором проекта.

Этот сценарий может быть легко осуществим, если вехи / задачи являются дочерними маршрутами, но это не так! Все 3 вида относятся к маршрутам верхнего уровня.

AFAIK с использованием дочерних маршрутов означает, что компоненты также должны быть дочерними в иерархии пользовательского интерфейса, поэтому у меня не может быть 3 параллельных / боковых представлений.

Как еще я могу добиться того, чего хочу?

введите описание изображения здесь

1 ответ

Решение

Создайте сервис и внедрите его в каждый из трех компонентов.

Внутри этого сервиса создайте методы setProject(projectID) и getProject(). Когда пользователь нажимает кнопку "Открыть", вызывайте этот метод в службе, передающей выбранный проект.

Внутри метода setProject() сохраните выбранный идентификатор проекта в переменной класса и, используя класс var типа EventEmitter, создайте событие, которое содержит выбранный идентификатор проекта в качестве полезной нагрузки.

В конструкторах двух других компонентов немедленно вызовите getProject () для службы и подпишитесь на этот EventEmitter.

Таким образом, как только пользователь нажимает на ссылки "Вехи" или "Задачи", он получает идентификатор проекта. Более того, если пользователь выбирает другой проект, когда один из других маршрутов активен, новое значение будет доступно для этого базового компонента через подписку.

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