组件级的Angular 2 RC5提供程序每次都会获得新的实例

时间:2016-08-11 15:48:34

标签: javascript angular

在RC5之前,我们可以在组件级别声明提供程序,如下所示:

@Component({
  providers: [SomeService]
})

每个组件都会获得SomeService的新实例,但是现在使用RC5的组件提供程序已被弃用,以便我们如何实现这种效果?

2 个答案:

答案 0 :(得分:1)

一种方法是向您的服务添加一个返回新实例的工厂方法。

export class SomeService {

    constructor(private http: Http) {}

    create() {
        return new SomeService(this.http);
    }

}

这非常糟糕,需要您在组件中调用create。

订阅的解决方案似乎是使用Factory Provider

基本上,您创建工厂方法和提供者对象:

import { Http }  from '@angular2/core';
import { SomeService } from './SomeService';

let someServiceFactory = (http: Http) => {
    return new SomeService(http);
};

export let SomeServiceProvider =
  { provide: SomeService,
     useFactory: someServiceFactory,
     deps: [Http]
  };

现在您像以前一样注入SomeService,并且您将始终获得一个新的transient实例。

将提供程序导入您的模块或组件,并将其注册为providers: [someServiceProvider]

或者将其内联为:

providers: [{ 
    provide: SomeService, 
    useFactory: (http: Http) => { return new SomeService(http)}, 
    deps: [Http]
}]

答案 1 :(得分:-1)

根据快速启动here服务并没有真正改变。还需要4个核心的东西

  1. 通过注入
  2. 创建服务

    2.将该服务导入组件

    3.提供该服务

    4并在导出

    中构建它