- Создает ли Ленивая загрузка новый Injector в Angular?
Right.
Для каждого углового модуля, загруженного ленивымсоздает инжектор, который наследуется от родительского инжектора.
Но это не означает, что этот унаследованный инжектор будет создавать новый экземпляр для каждой службы, предоставляемой в родительском инжекте , если вы не предоставите эту услугу в загруженном модуле * 1014.*.В противном случае Angular перейдет к дереву, чтобы найти предоставленную услугу, и найдет его на родительском инжекторе.
Так что просто добавьте свой сервис в массив LazyModule providers
, и он будет зарегистрирован в LazyModule, и таким образом LazyComponent будет получать экземпляр из загруженного инжектора.
@NgModule({
imports: [
CommonModule,
LazyRoutingModule
],
providers: [AppService], <=================
declarations: [LazyComponent]
})
export class LazyModule { }
Я также предлагаю вамчитая эту статью
Обновление
Из комментария:
Так что не должно быть такого поведения в случае отложенной загрузки, как из документа.Маршрутизатор добавляет всех провайдеров от корневого инжектора к дочернему инжектору.
Я верю только коду.
Когда угловое создает инжектор с отложенной загрузкой (NgModuleRef) он передает только ссылку на родительский инжектор (NgModuleRef).
![enter image description here](https://i.stack.imgur.com/lqQXP.gif)
И когда он разрешает зависимость AppService, он сначала смотрит на дочерний инжектор, а затем на родителя, потому что в дочернем инжекторе нет зарегистрированного AppService
![enter image description here](https://i.stack.imgur.com/EC8Ys.gif)