错误:没有Http提供商! (MyService - > Http)

时间:2018-01-19 07:46:35

标签: angular typescript

我正在使用角度2。

@Injectable()
export class MyService {
    constructor(private http: Http, @Inject('name') @Optional() public name?: string) {            
}

在appModule里面我正在尝试使用提供程序进行服务

import { Http } from '@angular/http/';



 @NgModule({
  bootstrap: [App],
  declarations: [
    App    
  ],
  imports: [ // import Angular's modules    
    BrowserModule,
    HttpModule
 ],
  providers: [    
    Http, // if I comment this out I'm getting ERROR Error: No provider for 
          // Http! (MyService -> Http)
    MyService, 
    [
      {  provide: 'name', useValue: ''  }      
    ],
....,

AppComponent内部我正在使用反射式注射器

const injector = ReflectiveInjector.resolveAndCreate(
      [MyService,
        {
          provide: 'name', useValue: 'my name'
        }
      ]);

但我得到了 案例一: 内部提供商,如果我有以下

providers: [ Http ]

然后我得到了

  

未处理承诺拒绝:没有ConnectionBackend的提供商! ;   区域:;任务:Promise.then;值:错误:没有提供商   ConnectionBackend!

如果离开Http,providers: [ ]我正在

  

错误:没有Http的提供商! (MyService - > Http)

在实际服务上我有像

这样的构造函数
@Injectable()
export class MyService {
    constructor(private http: Http, @Inject('name') @Optional() public name?: string) {

    }

更新 我正在注射AppComponent 构造函数(private parentInjector:Injector){ }

const injector = ReflectiveInjector.resolveAndCreate(
      [MyService,
        {
          provide: 'name', 'abc'
        }
      ], this.parentInjector);

    this.security = injector.get(MyService);
  

未处理承诺拒绝:没有ConnectionBackend的提供商! ;   区域:;任务:Promise.then;值:错误:没有提供商   ConnectionBackend!

2 个答案:

答案 0 :(得分:0)

将此模块用于最新版本的Angular:

import { HttpClient, HttpHeaders } from '@angular/common/http';

答案 1 :(得分:0)

您需要传递父注入器(来自Angular应用程序),否则创建的注入器将只知道您明确传递的提供者

constructor(private parentInjector:Injector) {

}
 ...

 const injector = ReflectiveInjector.resolveAndCreate(
  [MyService,
    {
      provide: 'name', useValue: 'my name'
    }
  ], this.parentInjector);

另见https://angular.io/api/core/ReflectiveInjector#resolveAndCreate