Угловой маршрутизатор передает данные компоненту

#javascript #angular #typescript #refactoring #angular-routing

Вопрос:

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

На данный момент компонент получает данные примерно так:

 this.account = activatedRoute.snapshot.data.account
 

Комментарии:

1. Э-э, я никогда не видел такого способа передачи данных через маршрутизатор. Мне кажется, что это неуклюжий хак. Маршрутизатор предназначен для маршрутизации, а службы-для обмена данными между компонентами.

2. Ладно, у меня такое же чувство 😉 Спасибо за ваш ответ.

Ответ №1:

Существует несколько способов передачи данных в угловой компонент.

Для таких объектов, как учетная запись пользователя, я бы использовал поставщика (чтобы он был готов к запуску компонента), службу (для совместного использования в приложении) или охрану (например, если вы хотите выйти, когда не вошли в систему).

Когда я хочу повторно использовать один и тот же компонент на разных маршрутах и дать ему некоторые подсказки о поведении is, я бы использовал данные маршрутизатора.

Другой вариант использования, с которым я столкнулся, заключается в определении глобального состояния приложения с помощью активированного маршрута(маршрутов). Каждый маршрут может определять свои данные, служба прослушивает события маршрутизатора и сохраняет объединенное состояние. Это помогает мне в больших приложениях иметь конфигурацию на основе маршрута для отображения заголовка, меты, панели инструментов и меню и т. Д…

Ответ №2:

Если вы хотите передать данные по маршруту, вот простой пример.

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

 { path: 'todo', component: TodoComponent, data: { id:'1', name:"Todo Title"} }
 

Тогда в вашем компоненте вы можете сделать что-то вроде этого:

 ngOnInit() {
      this.activatedroute.data.subscribe(data => {
          this.todo = data;
      })
}
 

Было ли это полезно?

Комментарии:

1. Да, спасибо, но передача данных в службу-лучшая практика или я ошибаюсь?

2. Да, вы правы. Существует три способа передачи данных от компонента к компоненту, исключая прохождение маршрутов. Декораторы ввода и вывода и Сервис. В сервисе вы можете хранить некоторые данные и собирать их в нужные компоненты. Теперь, если вы хотите немедленно получить данные из сервиса после их отправки, вы можете использовать функцию RxJS под названием Subject. Создайте тему, выделите данные из компонента A, а в компоненте B обязательно подпишитесь на эту тему, чтобы всегда получать последние данные. Просто не забудьте отписаться от этой темы, чтобы предотвратить утечку памяти.