将参数传递给Angular中@Injectable的构造函数?

时间:2018-03-01 06:21:47

标签: javascript angular dependency-injection

假设我们有一个@Injectable类,如下所示:

interface IServiceConfig {
    boo: string;
    foo: string;
}

@Injectable()
class Service {
    boo: string = "boo";
    foo: string = "foo";

    constructor(IServiceConfig isc) {
       Object.assign(this, isc);
    }
}

是否可以将IServiceConfig实例传递给Service的构造函数,同时仍允许Angular创建并注入Service实例?

在Angular创建实例之前,是否有不同的方法来配置服务?

1 个答案:

答案 0 :(得分:1)

这是未经测试的,但您应该可以这样做:

import { Injectable, Inject, Optional } from '@angular/core';

interface IServiceConfig {
    boo: string;
    foo: string;
}

@Injectable()
class Service {
    boo: string = "boo";
    foo: string = "foo";

    constructor(@Inject('isc') @Optional() public isc?: IServiceConfig ) {
       Object.assign(this, isc);
    }
}

在您的提供商中(例如在app.module中):

providers: [
    {provide: 'isc', useValue: {boo: 'hoo', foo: 'bar'},
...