2017-01-27 3 views
0

Я понимаю, как маршрутизация и передача информации между компонентами обычно работают в режиме Угловая 2. Например, вы должны использовать следующий тип настройки для загрузки компонента и сопроводительного идентификатора:Маршрутизация на новый маршрут при доступе к одному и тому же источнику данных

Но предположим, вы уже находитесь на маршруте, и теперь вы хотите щелкнуть ссылку, чтобы загрузить новый маршрут (с более узкой информацией), но все данные, к которым вы обращаетесь, находятся в одном продукте .id как тот, который вы только что нажали (потому что они рисуют из одной и той же конечной точки api и product.id в вашем api (mongoDB)). Как бы вы это сделали?

В этом случае вы не можете просто передать «product.id», потому что хотите получить доступ к массиву WITHIN того же product.id, что и предыдущий маршрут/компонент. Таким образом, вам нужен новый маршрут, но информация из одного источника данных (тот же product.id). Чтобы уточнить, новый маршрут имеет «контакт» для компонента, а затем «contact.id» для конкретного параметра. Но это не отдельный источник данных, потому что «contact.id» - это значение массива WITHIN product.id, с которого я просто удалился. Как бы вы это сделали?

В настоящее время у меня открыт новый маршрут, который содержит список контактов, а затем идентификатор конкретного контакта - так что маршрут выглядит так: http://localhost:4200/contact/21469568eds3913283df5cs. Так что это работает так, как ожидалось. Напомним, что контактный идентификатор, указанный здесь, находится внутри массива моего product.id - это не другой источник данных. Итак, как мне получить доступ к информации из идентификатора предыдущего маршрута в новом маршруте? Потому что - снова - тот же источник данных, только новый маршрут. Сейчас я получаю «неопределенные» ошибки в новом компоненте/маршруте.

ответ

1

Это может быть проблема с дизайном. Если у вас есть маршрут до product, с которым вы работаете, а затем откройте contact, который назначен именно этому product (как вы говорите, контакты - это массив внутри вашего продукта), то вы также должны отразить это на своем маршруте. Например,

/product/:productId/contact/:contactId 

Таким образом, у вас есть вся соответствующая контекстная информация на вашем маршруте. В этом случае Resolver имеет смысл для всех маршрутов, которые соответствуют рисунку на

/product/:productId/** 

Таким образом, вы будете иметь легкий доступ к продукту, даже если вы активировали маршрут в детали контакта. Кэширование продукта в пределах ProductResolver может иметь смысл, если вы ожидаете, что несколько маршрутов, называемых одним и тем же productId (и продукт будет дорогим для получения, например, из-за сложных соединений SQL или изменится очень редко)

+0

Чтобы уточнить, мои маршруты aren 't вложен так. Скорее я хочу перейти от «product/productId» к «contact/contactId», но данные для второго маршрута взяты из одного источника данных (одного документа) в качестве первого компонента. Является ли резольвер все еще хорошим вариантом здесь? – Muirik

+0

О, право. Я скорректировал свой ответ в соответствии с вашей информацией. – Matt

+0

Спасибо за информацию, Мэтт. Я обязательно посмотрю на это. Итак, большой вид изображения, являются ли резольверы для этой конкретной ситуации? И вы увидите это как рекомендуемый способ выполнить то, что я пытаюсь выполнить, или один из нескольких способов? Просто ищите немного больше контекста: ситуации, когда новый маршрут получает информацию из того же источника, что и предыдущий маршрут. – Muirik

 Смежные вопросы

  • Нет связанных вопросов^_^