Передача данных между компонентами с помощью @Input и использование router-outlet?

Как проще всего передавать данные по компонентам? Я понимаю, что для Parent-> child вы должны использовать @Input, однако это не очень полезно, если вы используете маршрутизатор-выход, так как вам нужно получить доступ к дочернему шаблону (и я не понимаю, как вы можете это сделать, когда вы используйте router-outlet) и/или большое приложение. Кроме того, это возможно только с сервисом, верно?

Это кажется хорошим объяснением, но я не могу не переведи это на мою проблему. Поскольку я работаю над более крупным проектом (младшим и изучаю angular, пока работаю), и я не могу просто вводить некоторые значения здесь и там.

Также я начал с услуги, но мой начальник сказал, что она мне не нужна, однако использование услуги показалось мне разумным.


person Exitl0l    schedule 05.03.2019    source источник
comment
Если вы хотите передать параметры маршрута, вам нужно создать другой компонент, который получает и преобразует то, что вам нужно, из параметров маршрута и передает их в качестве входных данных дочернему компоненту.   -  person Andrei Tătar    schedule 05.03.2019
comment
Лучший способ — ngrx, но это не так просто, или вы можете взглянуть на angular.io/api/router. /Решение   -  person Whisher    schedule 05.03.2019
comment
@Whisher Я лучше напишу сервис для связи, чем буду мучить себя этим. Некоторые документы Angular кажутся мне тусклыми, в том числе и этот.   -  person Exitl0l    schedule 05.03.2019


Ответы (1)


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

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

В качестве альтернативы, если данные достаточно малы или есть только некоторые идентификаторы, можно использовать параметры строки запроса для передачи данных.

РЕДАКТИРОВАТЬ: Альтернативой также является использование библиотеки, такой как NGRX, но это потребует больших накладных расходов при настройке.

person Derked    schedule 05.03.2019
comment
Как бы я ни хотел облегчить свою жизнь, я не могу возиться с зависимостями и тому подобным. Это текущий проект, я слишком молод, чтобы влиять на него, я думаю. Если бы это не было сделано с помощью службы, как бы вы передавали данные по компонентам с помощью встроенных инструментов angular? - person Exitl0l; 05.03.2019
comment
Если NGRX не подходит, откуда вы берете данные, которые необходимо передать? Можете ли вы получить доступ к тем же данным из вызова REST? Если это так, вы можете просто сделать родственный компонент ответственным за получение данных. Самая большая проблема со службой заключается в том, что вам придется управлять данными с отслеживанием состояния в службе, что обычно нежелательно. Другой вариант — вы можете поместить его в локальное хранилище или что-то подобное. - person Derked; 05.03.2019
comment
У меня есть 2 компонента: один - это список, который получает список пользователей, и если вы нажмете на одного пользователя, он перенаправит вас на страницу редактирования, где вы должны отредактировать указанного пользователя и получить данные из списка (вот где я терплю неудачу в данный момент ). Я мог бы снова вызвать остальные из компонента редактирования, но разве это не потребляет ресурсов? чтобы вызвать его снова, даже у меня должны быть данные, поскольку они были известны компоненту списка. - person Exitl0l; 06.03.2019
comment
Да, вы должны сделать вызов REST и получить отдельного пользователя. В зависимости от вашего API вам может потребоваться больше информации на отдельной странице, чем на странице списка, и вы можете вернуть разные DTO. Кроме того, поскольку вы используете угловой маршрутизатор, что произойдет, если кто-то откроет страницу по ссылке, а не по списку? Если бы вы использовали службу для хранения данных, ваша страница не работала бы. В общем, API REST предназначены для получения множества небольших запросов. - person Derked; 06.03.2019