Angular 2 RC5的组件级提供商每次都会获得新的实例
Angular 2 RC5 providers at component level get new instance every time
在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个核心的东西
- 通过可注入的 创建服务
2。将该服务导入组件
3。提供服务
4并在导出
相关文章:
- ES6构造函数返回基类的实例
- KnockoutJS-组件-多个实例
- 为什么无法在TypeScript中导出类实例
- 如何在GoogleWeb工具包(GWT)中从JSNI调用接口(实例化)
- fluxxor向一个flux实例添加一组以上的操作
- 使用jQuery获取Dropzone实例/对象
- "实例范围”;TypeScript类的getter/setter
- 如何在速度模板中获取LiferayPortlet实例id
- 同一项怎么可能在一个实例中未定义,却在另一个实例上定义
- 实例创建(JS)
- 显示模块模式在Knockout中设置模型的新实例
- 如何获取单选按钮的多个实例的选定单选按钮值
- 当同一浏览器的两个实例浏览时,Javascript页面如何具有唯一的ID
- 在哪里可以找到RXUI Javascript'时间飞逝'实例
- spine.js在启动时填充模型实例
- 不再需要时使用jQuery/kill实例
- 如何在用户输入时实例化数组
- 从Sequelize中的非实例更新
- 如何基于数组值创建新实例
- Angular 2 RC5的组件级提供商每次都会获得新的实例