将参数从组件发送到角度为6的服务构造函数

时间:2018-08-09 05:59:49

标签: typescript dependency-injection frontend angular6 web-frontend

我是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.log(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->字符串]:     NullInjectorError:没有字符串提供程序!     在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)

1 个答案:

答案 0 :(得分:1)

您不执行this.service = new myService ("name");。服务在某处提供时即创建。就您而言,在app.module.ts中。这意味着整个应用程序将仅使用此服务的一个实例。如果需要多个实例,则必须在模块或组件中再次提供它。如果在不同级别(例如,在app.module和组件中)多次提供服务,则使用最低级别提供的服务。

要在组件中提供服务,只需在@Component装饰器中添加行即可:

@Component({
    selector: 'table',
    templateUrl: './table.component.html',
    providers: [myService], // <---
})

如果在构建此服务时绝对需要为该服务传递一些价值,请参见this answer(我希望它仍然是现实的)