Size: a a a

2020 July 22

Vl

Viktor limishenko in Angular Kyiv
аааа
источник

Vl

Viktor limishenko in Angular Kyiv
туплю
источник

Vl

Viktor limishenko in Angular Kyiv
Dmitriy D
Попробуйте в сервисе, который должен создаваться на каждый вызов, указать provideIn: ‘any’
Спасибо, работает.
То есть, в новом движке теперь даже не нужно указывать в каждом компоненте его как провайдер?
источник

DD

Dmitriy D in Angular Kyiv
Viktor limishenko
Спасибо, работает.
То есть, в новом движке теперь даже не нужно указывать в каждом компоненте его как провайдер?
да, any на каждый новый провайд будет создавать новый инстанс
источник

Denis Мовляйко... in Angular Kyiv
Dmitriy D
Попробуйте в сервисе, который должен создаваться на каждый вызов, указать provideIn: ‘any’
можно также совсем убрать provideIn
источник

Vl

Viktor limishenko in Angular Kyiv
Denis Мовляйко
можно также совсем убрать provideIn
Кстати - так не работает
источник

Vl

Viktor limishenko in Angular Kyiv
Denis Мовляйко
можно также совсем убрать provideIn
Пишет что нет провайдера. Я так изначально и пробовал
источник

Sergey Фrolov in Angular Kyiv
Dmitriy D
Попробуйте в сервисе, который должен создаваться на каждый вызов, указать provideIn: ‘any’
Это новый сервис в рамках лейзи модуля, а не компонента. Для компонентов все также нужно указать инжект
источник

DD

Dmitriy D in Angular Kyiv
Sergey Фrolov
Это новый сервис в рамках лейзи модуля, а не компонента. Для компонентов все также нужно указать инжект
да, вы правы, я забываю, что у нас почти все компоненты как модули представлены
источник

Sergey Фrolov in Angular Kyiv
Viktor limishenko
Всем привет!
Вопрос знатокам.
Каким образом можно внедрить один сервис в другой так, чтобы не использовать провайдер компонента, или глобальный провайдер?
То есть - внедрить с декоратором @Self()
По типу:
constructor(
  @Self() private someService: SomeService
){}

Но декоратор @Injectable не принимает в параметре свойство провайдеров и, соответственно сервис ищется в DI дереве выше.

Но мне необходимо, как раз таки, иметь его не как синглтон, а создавать инстенс для каждого внедрения отдельно,  чтобы инжектируемый сервис размонтировался в момент когда размонтируется инжектирующий сервис.

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

Sergey Фrolov in Angular Kyiv
И уже в фабрике решать, нужен ли новый инстанс
источник

Vl

Viktor limishenko in Angular Kyiv
Sergey Фrolov
И уже в фабрике решать, нужен ли новый инстанс
Понял, спасибо
источник

Sergey Фrolov in Angular Kyiv
Собственно тут нужно будет реализовать все руками. Но мне кажется, что игра не стоит свеч )
источник

Sergey Фrolov in Angular Kyiv
Ещё вариант к этому, можно сделать свой декоратор или как-то использовать имеющиеся
источник

Vl

Viktor limishenko in Angular Kyiv
Sergey Фrolov
Собственно тут нужно будет реализовать все руками. Но мне кажется, что игра не стоит свеч )
Да, вот еще с фабриками не знаком, так что...
Ну в принципе - меня устраивает внедрение на уровне модуля. Так как, действительно, у меня почти каждый (по крайней мере крупный) компонент вынесен как отдельный модуль.
источник

Sergey Фrolov in Angular Kyiv
А що дає компонент-модульна архітектура?
источник

Vl

Viktor limishenko in Angular Kyiv
Sergey Фrolov
А що дає компонент-модульна архітектура?
Ну, конкретно в контексте моего приложения, крупный компонент = страница, или вкладка каких ни будь табиков, так что даёт модульный роутинг и лейзи лоад.
источник

Sergey Фrolov in Angular Kyiv
Зрозуміло
источник

IF

Igor Filippov in Angular Kyiv
Мы неплохо так бандл уменьшили, когда шаред компоненты распихали по отдельным модулям
источник

Vl

Viktor limishenko in Angular Kyiv
Igor Filippov
Мы неплохо так бандл уменьшили, когда шаред компоненты распихали по отдельным модулям
Ну, опять таки, это работает только с лейзи лоадом
источник