【问题标题】:How can I add providers to a Service class in Angular 2?如何将提供程序添加到 Angular 2 中的服务类?
【发布时间】:2016-07-10 07:37:26
【问题描述】:

我有一个使用服务的组件。该组件看起来像这样:

@Component({
    moduleId: module.id,
    selector: 'test',
    providers: [HTTP_PROVIDERS, TestService]
})
export class TestComponent implements OnInit {

    constructor(private _testService:TestService) {
    }

如您所见,我在组件中添加了HTTP_PROVIDERS 提供程序。这很有效,因为 DI 现在知道 http 类。然而,真正使用Http 类的是我的TestService,而不是我的TestComponent

@Injectable()
export class TestService {

    constructor(private _http:Http) {
    }

我觉得既然是使用Http类的服务,那么它本身应该是包含提供者的服务。 TestComponent 不知道 TestService 需要什么提供者。

由于服务类没有该组件装饰器,我不确定如何实际向它添加提供程序。如何将提供程序添加到 Service 类?

【问题讨论】:

    标签: javascript angular angular2-services angular2-providers


    【解决方案1】:

    你能做的是,

    HTTP_PROVIDERS注入bootstrap function

    import {HTTP_PROVIDERS} from '@angular/http';
    bootstrap(AppComponent,[HTTP_PROVIDERS]);
    

    为您服务,

    import {Http} from '@angular/http';
    
    @Injectable()
    export class TestService {
        constructor(private _http:Http) {}
    }
    

    【讨论】:

    • 也许将HTTP_PROVIDERS 放在引导函数中仍然是合理的,因为它经常使用。但是,如果它是仅在此服务中使用的其他一些类呢?通过引导功能将其包含在每个页面上并不是很好。如果提供者只包含在服务类本身中会更好吗?
    • 如果提供者只包含在服务类本身中是什么意思?
    • 我的意思是,如果有一个仅由特定服务使用的提供程序,我是否可以仅在该服务的文件中声明该提供程序?
    • 我不明白你的意思。 'Providers' 是服务数组的集合。在组件中,您定义:我将通过将该服务放入 providers 数组中来使用它。仅供参考,如果您在组件中使用提供程序,它将为该组件创建不同的服务实例。要使服务单例,您必须将其注入引导程序......如果您不打算使用单例服务,您可以使用提供者数组...
    • 对不起,如果我不清楚我的意思。我不确定我是否对提供者的理解有误。我的理解是 providers 必须在装饰器中定义,然后才能注入类。在我的例子中,既然TestService 正在注入Http 类,为什么不应该在TestService 中定义Http 的提供者,而是在TestComponent 中定义?我可以在TestService 中指定Http 提供程序吗,因为我认为TestComponent 不适用于TestService 中的注入?
    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2017-08-23
    • 2015-09-17
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多