gpt4 book ai didi

javascript - 如何在运行时确定可注入(inject)的 Angular 服务?

转载 作者:行者123 更新时间:2023-11-28 04:52:38 28 4
gpt4 key购买 nike

对于没有为此代码创建一个插件,我提前表示歉意,它的运行需要许多第三方控件。

我的问题是关于在运行时根据某些条件选择服务、依赖项注入(inject)。

我们在此示例中仅讨论一项服务。

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 提供者! (服务1 -> Http)

导致错误的代码版本是:

我为MyComponent添加了一个成员变量:private service: any = '';

构造函数现在看起来像

constructor() {

// this does not work with the http module
let injector = ReflectiveInjector.resolveAndCreate([Service1]);
this.service = injector.get(Service1);
}

有人知道是什么导致了上述错误吗?

最佳答案

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

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

关于javascript - 如何在运行时确定可注入(inject)的 Angular 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42790754/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com