如何在运行时确定可注入的角度服务?

时间:2017-03-14 15:56:55

标签: javascript angular

我提前为没有为此代码创建一个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);
}

任何人都会看到导致上述错误的原因?

1 个答案:

答案 0 :(得分:0)

不要忘记将Http添加到ReflectiveInjector.resolveAndCreate中传递的数组:

let injector = ReflectiveInjector.resolveAndCreate([Service1,Http]);