Size: a a a

Советский Angular

2021 May 04

AI

Alex Inkin in Советский Angular
Пиши в них providedIn: root и инжекть только в лейзи модуле — они должны попасть в бандл модуля только.
источник

C☭

Chadwick ☭ in Советский Angular
источник

c

const in Советский Angular
^_^
источник

c

const in Советский Angular
как дела, чат?
источник

c

const in Советский Angular
доброе утро всем
источник

C☭

Chadwick ☭ in Советский Angular
источник

MA

Maxim Afanasev in Советский Angular
А, ну да, точно, они же не будут импортироваться нигде за пределами лейзи модуля..
источник

AI

Alex Inkin in Советский Angular
Просто добавление провайдеров в модуль создаёт иллюзию того, что у модулей есть некий скоуп в DI. Из-за этого могут случаться проблемы, которые выглядят очень непонятно.
источник

E

Eugene in Советский Angular
они ж лениво создаются
источник

MA

Maxim Afanasev in Советский Angular
Я на эти грабли уже наступал, да. Не очень интуитивно.
источник

MA

Maxim Afanasev in Советский Angular
Кто?
источник

E

Eugene in Советский Angular
инстансы провайдеров, даже если они providedIn root
источник

MA

Maxim Afanasev in Советский Angular
Ну, это да. Я больше про то, в какой чанк они попадут. Туплю с утра немного )
источник

E

Eugene in Советский Angular
а, ну да
источник

IE

Igor' Ember in Советский Angular
А если требуется инстанс доступный на уровне ленивого модуля (а на руте будет отдельный)?
источник

IE

Igor' Ember in Советский Angular
Ну, так у лейзи модулей есть собственный инжектор, отличный от рута
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
Тогда в Injectable надо прописать providedIn: 'any'
источник

IE

Igor' Ember in Советский Angular
то есть forRoot / forChild нужны по большей части для того, чтобы добавлять провайдеры по условию?
источник

Вキ

Вертихвост キバ 🏡🦊... in Советский Angular
через forChild можно доп конфигурацию прописывать, чтобы она подтягивалась основным провайдером

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

AI

Alex Inkin in Советский Angular
Если я правильно понимаю, то там не совсем так. Опять же, никакой магии нет, просто докидываем провайдеры в инжектор — в forChild в роутере докидываются значения в мульти токен. Мульти токены можно определять только на одном инжекторе. По этой причине, например, нельзя докинуть в глобальный мульти токен значение в декораторе директивы, только в локальный (как, например, NG_VALUE_ACCESSOR). Но так как в лейзи роуте создаётся как бы свой глобальный инжектор, просто наследующий значения из общего, то тут можно добавить в мультитокен значений для всех дочерних инжекторов, которые в этом лейзи роуте сидят. Так работает ROUTES в случае роутера и лейзи модулей. Но ничего спецефичного в связке именно в forChild/forRoot нет. Суть просто в том, что в списке imports могут быть как модули, так и конструкции ModuleWithProviders и так уж повелось удобно это делать статичными методами. Если не ошибаюсь, можно такие штуки хоть утилитными функциями клепать.

EDIT: Не, лейзи тоже перетирают мультитокены.
источник