我提前为没有为此代码创建一个plunker而道歉,它需要运行许多第三方控件。
我的问题是在运行时根据某些条件选择服务,依赖注入。
我们只讨论此示例中的一项服务。
import { Injectable } from '@angular/core';
import { Http, Response} from '@angular/http';
@Injectable()
export class Service1 {
constructor (
private http: Http) {
}
}
在我的组件中,如果我有一个固定的,一切都很好。
import {Component, ViewChild, OnChanges, Input, ReflectiveInjector, SimpleChange} from '@angular/core';
import {Observable} from 'rxjs/Rx';
import { Service1 } from './my.service.1';
@Component({
providers: [
Service1
],
moduleId: module.id,
selector: 'my-component',
templateUrl: './my-component.component.html'
})
export class MyComponent {
constructor(private service : Service1
) {
}
在上面的情况下一切都很好,没有运行时错误。
现在,如果我更改为动态版本,则会收到错误消息 例外:http://localhost:3000/app/app.component.html:5:8引起的错误:没有Http的提供者! (Service1 - > Http)
导致错误的代码版本是:
我为MyComponent添加了一个成员变量:私人服务:any ='';
,构造函数现在看起来像
constructor() {
// this does not work with the http module
let injector = ReflectiveInjector.resolveAndCreate([Service1]);
this.service = injector.get(Service1);
}
任何人都会看到导致上述错误的原因?
答案 0 :(得分:0)
不要忘记将Http添加到ReflectiveInjector.resolveAndCreate
中传递的数组:
let injector = ReflectiveInjector.resolveAndCreate([Service1,Http]);