В приведенном ниже примере кода app.module устанавливает поставщиков для использования для внедрения зависимостей Angular. Angular, следовательно, имеет ссылку на класс DataService.
// app.module.ts
import { DataService } from './services/dataService';
import { LocationsComponent } from './components/locations.component';
@NgModule({
declarations: [
AppComponent,
LocationsComponent,
],
imports: [
BrowserModule,
HttpClientModule,
],
providers: [
DataService
],
bootstrap: [AppComponent]
})
export class AppModule { }
Насколько я понимаю, в location.component Angular будет выполнять DI для создания нового экземпляра класса DataService в конструкторе. Чего я не понимаю, так это почему в компоненте необходим импорт {DataService}? Почему Angular не может предоставить этот экземпляр DataService конструктору, когда он видит тип DataService, указанный в конструкторе, так как Angular знает из app.module, где найти класс DataService? Импорт {DataService} в location.component представляется излишним.
// locations.component.ts
import { DataService } from '../../../services/dataService';
@Component({
selector: 'app-locations',
templateUrl: './locations.component.html'
})
export class LocationsComponent {
data: any[] = [];
constructor(private dataService: DataService) {
this.data = dataService.load();
}
}