Я новичок в angular6, когда я отправляю параметр из компонента в службу, я получаю StaticInjectorError. Что случилось?
Мой код выглядит примерно так компонент:
import { Component, Input, OnInit } from '@angular/core';
import { myService } from '../../@core/data/myService';
@Component({
selector: 'table',
templateUrl: './table.component.html'
})
export class TableComponent implements OnInit {
constructor(private service: myService) {
}
ngOnInit() {
this.service = new myService ("name");
}
услуга:
import { Injectable, Inject } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { DataService } from './data.service';
@Injectable() export class myService {
constructor(
entityName: string,
) {
console.info(entityName);
}
}
app.module.ts:
import { myService } from './@core/data/myService '
import { TableModule } from './pages/table/table.module';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
HttpClientModule,
AppRoutingModule,
NgbModule.forRoot(),
ThemeModule.forRoot(),
CoreModule.forRoot(),
],
bootstrap: [AppComponent],
providers: [
myService,
TableModule
],
})
export class AppModule {
}
сообщение об ошибке: ProductsComponent.html: 1 ОШИБКА Ошибка: StaticInjectorError (AppModule) [BDBaseService -> String]: StaticInjectorError (Платформа: ядро) [BDBaseService -> String]: NullInjectorError: нет поставщика для String! в NullInjector.push ../ node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js: 979) в resolveToken (core.js: 1232) в tryResolveToken (core.js: 1182) в StaticInjector.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 1077) в resolveToken (core.js: 1232) в tryResolveToken (core.js: 1182) в StaticInjector.push ../ node_modules/@angular/core/fesm5/core.js.StaticInjector.get (core.js: 1077) в resolveNgModuleDep (core.js: 9238) в _createClass (core.js: 9283) в _createProviderInstance $ 1 (core.js: 9255)






Вы не делаете this.service = new myService ("name");. Услуга создается в тот момент, когда она где-то предоставляется. В вашем случае в app.module.ts. Это означает, что во всем приложении будет использоваться только один экземпляр этой службы. Если вам нужно несколько экземпляров, вы должны предоставить их снова в модуле или компоненте. Если услуга предоставляется несколько раз на разных уровнях (например, как в app.module, так и в компоненте), используется услуга, предоставляемая на самом низком уровне.
Чтобы предоставить услугу в компоненте, просто добавьте строку в свой декоратор @Component:
@Component({
selector: 'table',
templateUrl: './table.component.html',
providers: [myService], // <---
})
Если вам абсолютно необходимо передать какое-то значение этой службе во время ее создания, см. этот ответ (я надеюсь, что это все еще актуально)
Да, кстати, не используйте селектор table. Для очевидные причины
Не уверен, как это решает вопрос. Речь идет о службах с параметризованными конструкторами, а не о том, как создать экземпляр службы.
Покажите вам файл app.module.ts.