Почему компонент имеет отдельный инжектор, в отличие от загруженного модуля? - PullRequest
0 голосов
/ 21 июня 2019

Я читал на форсунках в угловых.После долгих чтений я узнал, что на этапе компиляции модули объединяются и будут доступны в корневом инжекторе.Но компонент, который является частью модуля, получает отдельный инжектор.Почему у него есть отдельный инжектор

@Component({
selector: 'app-parent',
templateUrl: './parent.component.html',
styleUrls: ['./parent.component.css'],
providers:[{ provide: APP_CONFIG, useValue:"From Component" }],
})
export class ParentComponent implements OnInit {
constructor(@Inject(APP_CONFIG) app_config: string) {
    //here app_config will be from component
}
}


@NgModule({
    declarations:[
        ParentComponent
    ]
providers:[{ provide: APP_CONFIG, useValue:"fromModule" }]
})
class AModule(){
    constructor(@Inject(APP_CONFIG) app_config: string){
        //Here the value will be "from root"
    }
}

@NgModule({
imports:[AModule],
providers:[{ provide: APP_CONFIG, useValue:"fromRoot"  }]
})
class AppModule(){ }

Я понимаю, почему значение инжекции в AModule "fromroot" из-за того, что загружаемые модули не ленивые объединяются во время компиляции.Но почему поведение на уровне компонентов отличается?Спасибо!

1 Ответ

0 голосов
/ 21 июня 2019

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

Нет, если вы не укажете ключ провайдера в декораторе @Components, у него не будет собственного инжектора

Он получит то, что обеспечит корневой инжектор. Кроме того, для ясности, если мой модуль не предоставляет эту услугу, он получит то, что обеспечит корневой инжектор, даже если это модуль с отложенной загрузкой.

Если он предоставляет ту же услугу, то 1. если модуль загружен с отложенной загрузкой, то у него будет собственный экземпляр службы (так как у него будет свой дочерний инжектор) (Angula любит дочерний объект больше, чем родительский). 2. Если модуль загружен с нетерпением, то также не будет ошибок -> будет использоваться один и тот же экземпляр среди двух модулей.

...