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

Angular 2 RC5 providers at component level get new instance every time

本文关键字:实例 RC5 组件 提供商 Angular      更新时间:2023-09-26

在RC5之前,我们可以像这样在组件级别声明提供商:

@Component({
  providers: [SomeService]
})

每个组件都会得到一个新的SomeService实例,但是现在在RC5中,组件提供程序被弃用了,那么我们如何实现这个效果呢?

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

export class SomeService {
    constructor(private http: Http) {}
    create() {
        return new SomeService(this.http);
    }
}

这是一个很大的hack,需要您在组件中调用create。

似乎订阅的解决方案是使用工厂提供程序。

创建工厂方法和提供者对象:

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]
}]

根据这里的快速开始,服务并没有真正改变。仍然需要4个核心的东西

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

2。将该服务导入组件

3。提供服务

4并在导出