providedIn: root, это создание сервиса на самом верхнем уровне, который доступен в любом месте приложения
Это я знаю. Нужно ли заменить "root" на "LazyModule", если сервис используется только в этом модуле?
Да, логично провайдить сервисы на уровне, на котором их нужно использовать) В данном случае в конкретном модуле/компоненте
А если сервис используется более одного раза, то везде "root"?
Если, скажем, сервис используется на разных страницах, то: Или сделать его глобальным (providedIn: 'root'). Или провайдить в каждую страницу, чтобы создавались для них независимые инстансы. Зависит от задачи. Чаще всего, сервисы делаются рутовыми если их нужно переиспользовать на разных страницах. Но не без специфических ситуаций, в которых уже можно подумать в другую сторону=)
Спасибо. Сейчас изменю все сервисы, которые используются в одном модуле с root на LazyModule.
Ну и с точки зрения файловой архитектуры, логично размещать такие сервисы в папке с самим модулем. А глобальные сервисы - на глобальном уровне=)
Есть ли такой проект?
проще говоря с разным namespace. Это же нужно только, чтобы избежать путаницу в дальнейшем. Быстрее ничего не грузится и тд
Все делают всё по разному, нет общего стандарта. Это важно понимать) Я предпочитаю архитектуру с "бизнес сущностями". Когда у тебя есть features/user, features/product и т.д. И в этих сущностях находятся все их рутовые сервисы, глупые компоненты, интерфейсы, енамы и т.д. Есть архитектура микрофронтендов, как в Тинькофф, там всё делается иначе и не юзаются сущности. В каждом проекте любой компонент - всегда умный, кроме, разве-что тех, которые находятся в shared библиотеке. В общем, мне нечего показать в этом плане=) Нужно или искать и находить что ближе к душе или на опыте понимать что к чему, со временем.
Есть общие рекомендации, впитывая которые, ты приходишь к какому-то энивей уникальному решению, но с какими-то, как это принято говорить "best practices" =))
У меня есть проект,с папкой services, и прям все сервисы лежат там А есть проект где для каждого модуля свой сервис))) хрен знает)) смотря какой проект )))
Так же и с модал. Окнами, пример)) может в самом компоненте создашь модалку, или же в глобальную папку modalsи все там установить))
А если есть модуль "settingModule" и в нем есть "settingTestModule". "settingTestModule" имеет свой сервис "settingTestService", Тогда возникнет ошибка Invalid provider for the NgModule 'settingTestModule' - only instances of Provider and Type are allowed, got: [?undefined?]. И получается в этом случае объявлять "settingTestService", как "root"?
Эммм, в верхнем уровне, т.е. settingModule
Вот такая ситуация. Как правильно добавлять?
Я бы оставил в сервисе @Injectable() - пустой А в модуле, в его providers - добавил бы сам сервис. Как я понял, ты сейчас продублировал providers и там и там
Попробуй providedin SettingModule
Оставь в сервисе @Injectable() декоратор пустым) Добавь сервис в providers модуля только
А разве это решит проблему circular dependency? Ну глобально говоря мой метод и твой, это одно и то же)
общего модуля?SettingModule
Ну я так понял тебе сервис нужен не в SettingModule, а в SettingTestModule. Значит в него)
я про циклическую зависимость
а вчем разница 'root': ConcreteModule vs providers: [ConcreteService]?
Что значит: 'root': ConcreteModule ? Имеется ввиду: @Injectable({ providedIn: ConcreteModule }) ?
Ну насколько мне известно - нет разницы. Просто мне не нравится идея писать: providedIn: Module. providedIn: 'root', 'platform' - ок, но не модуль/компонент. Причина: Ну, например providedIn: Component работает некорректно и этот функционал не предназначен для провайдинга в компонентах, хотя если добавить сервис в массив providers компонента - всё заебумба. По итогу, я считаю это странной историей, которая полезна лишь для провайдинга на высоких уровнях. Мое мнение субъективно в этом плане)
Обсуждают сегодня