#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 обязательно подпишитесь на эту тему, чтобы всегда получать последние данные. Просто не забудьте отписаться от этой темы, чтобы предотвратить утечку памяти.