Угловой v4: храним ли мы данные в Сервисе или Компоненте или в обоих?
Угловой v4: храним ли мы данные в Сервисе или Компоненте или в обоих?
Просмотрев довольно много учебников, а также прочитав документацию Angular, я до сих пор не понимаю эту тему.
https://angular.io/tutorial/toh-pt2 Угловое руководство четко показывает данные, хранящиеся в компоненте.
https://angular.io/guide/architecture#services Угловая архитектура> Раздел служб показывает код с услугой, имеющей массив данных (это правильно?).
Если мы будем хранить данные в Компонентах, мы бы сильно использовали @Input и @Output для перемещения данных между дочерними компонентами (если мы хотим, чтобы эти данные были в интерфейсе), однако это создает проблему, когда мы используем маршрутизацию, нам нужен наш новый компонент который загружается с маршрутизатора-выхода, чтобы сделать новый звонок нашему сервису за обещание сделать вызов API нашему серверу для хранения данных. Возможно, в этом случае у нас будет 2 компонента, содержащие одни и те же данные - однако они могут не совпадать.
Если мы храним данные в Сервисе, мы будем в значительной степени использовать наши Службы для извлечения данных и манипулирования данными (если мы хотим, чтобы эти данные были в интерфейсе), таким образом, наша служба содержит 1 набор данных, и каждый компонент может вызвать услугу данных в любое время для получения согласованных данных.
-
Каков надлежащий способ хранения данных? Разве один из других не рекомендуется?
Ответы
Ответ 1
Вообще говоря, вы хотите хранить данные в службе, если многие компоненты используют одни и те же данные. Таким образом, очень легко получить доступ к тем же данным из всех разных частей приложения. Если один компонент изменяет данные в службе, он будет изменен для всех компонентов, которые используют данные, которые обычно очень полезны. Однако иногда это необязательно, если вам нужно отправлять данные только от одного компонента к другому, где один является родителем другого. В этом случае рекомендуется использовать ввод/вывод.
Если вам не нужно отправлять конкретные данные между различными компонентами, то хранение данных в компоненте вполне приемлемо! Имейте в виду, что он не будет доступен из других компонентов, если вы не используете ввод/вывод.
Ответ 2
Компонентные контроллеры должны управлять только взаимодействием пользовательского интерфейса для этого конкретного компонента.
С другой стороны, службы управляют взаимодействием между компонентами, сопоставлением данных, обработкой событий между компонентами, которые не имеют прямой зависимости (parent> child, siblings и т.д.).
Идея заключается в том, что служба однажды создается, она остается в сфере действия и не разрушается. Компоненты с другой стороны удаляются из DOM после их уничтожения. С учетом сказанного, если вы используете свой компонент для выполнения, например, вызовов API для сбора данных, этот вызов API будет выполняться каждый раз, когда компонент инициализируется в жизненном цикле структуры, тогда как службы, как уже упоминалось, будут сохраняться.
Сохранение услуг также позволяет нам использовать такие вещи, как наблюдаемые, чтобы всегда поддерживать прямую линию между интерфейсом и внутренним концом.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ
Имейте в виду, что учебник Angular.io разделен на несколько разделов, чтобы дать полное представление о структуре, поскольку пользователь следует учебнику.
Ответ 3
Если несколько Компонентов обмениваются данными, поместите их в службу... когда это возможно. Я говорю, когда это возможно, потому что, заставляя службу управлять данными, теперь вам нужно беспокоиться о устаревших данных. Мое место хранения данных goto находится в компоненте, но вы должны быть осторожны, так как вы не хотите, чтобы сайт постоянно перечитывал данные.
Лично большинство моих компонентов управляют своими собственными данными, чтобы избежать проблем с устаревшими данными.
Если вы не беспокоитесь об этом, вы даже можете использовать службу кеширования, которая вместо хранения данных в ram хранит его в локальном хранилище или хранилище сеансов, чтобы убедиться, что сайт не замедляется нагрузками данные помещаются в компьютеры Ram.
Я не авторитет эксперта по этому, хотя, это только мое мнение.
Ответ 4
Вы знаете, что @Output имеет отношение к правилу EventEmitter, поэтому данные распределяются между компонентами путем привязки к событиям. Сервисы - это то, где вы обычно делаете что-то вроде запроса Http - что-то вроде RESTFUL api. Это может быть также локальное хранилище, сетевое подключение или как ведро для хранения состояния, пока приложение работает. Компоненты в общем случае связаны с представлениями и используют теневую DOM