当构造函数具有参数时,Angular 2 中的依赖注入
Dependency injection in Angular 2 when a constructor has arguments
我有一个表示模型的打字稿类,我希望实例通过angular的Http
服务与API进行通信。
但是模型的构造函数在创建实例时需要参数。例如一些超级简单的东西:
class SomeModel{
constructor(public id:number, public name:string, ){
}
我想注入 Http
服务,以便它可用于我的实例,但这似乎是这样做的规范方式,通过以下方式征用构造函数:
constructor(http:Http)
我一直在挖掘Injector
文档,但它有点稀疏,我没有找到任何有用的东西。有没有办法在不使用构造函数模式的情况下从 DI 系统中获取对 Http
等服务的引用?
我设法使用角度 4 解决了同样的问题。首先,创建使用组件注入器的新注入器。它知道您的SomeModel
类,并将modelParams
作为SomeModelParameters
类的实例传递。然后,使用此新创建的注入器来创建类实例。
@Injectable()
class SomeModel {
constructor(http: Http, someModelParamters: SomeModelParameters) { }
}
export class MyComponent {
constructor(injector: Injector) {
const modelParams = new SomeModelParameters();
const injectorWithModelParams = ReflectiveInjector.resolveAndCreate(
[
SomeModel,
{ provide: SomeModelParameters, useValue: modelParams }
],
injector);
this.someModel = injectorWithModelParams.resolveAndInstantiate([SomeModel]);
}
}
更新
HTTP_PROVIDERS
早已不复存在。 HttpClientModule
是当前的替代品。
源语言
如果注入具有构造函数参数的类,则需要添加@Injectable
注释。
@Injectable()
class SomeModel{
// constructor(public id:number, public name:string, ){
// }
constructor(http:Http) {}
}
为此,需要将HTTP_PROVIDERS
添加到bootstrap(AppComponent, [HTTP_PROVIDERS]);
另请参阅Angular2测试版 - 引导HTTP_PROVIDERS - "意外令牌<"
如果需要从组件传递其他参数,则可以使用函数传递它们。
另一种方法是手动创建实例并从注入器请求Http
。
export class MyComponent {
constructor(injector: Injector) {
this.someModel = new SomeModel(Injector.resolveAndCreate(Http), 1, 2);
}
}
相关文章:
- AngularJS依赖注入定时问题
- JavaScript模块化和依赖注入之间的区别
- 编写Karma+Mocha测试,同时使用依赖注入和“完成”
- Angular2文档-层次依赖注入程序(恢复服务)
- 使用依赖注入在 JavaScript 中返回函数
- 如何从指令的控制器调用依赖注入服务的嵌套方法
- AngularJS'依赖注入和RequireJS本质上是相同的
- 为Backbone.js应用程序设计依赖注入系统的范围界定问题
- 当使用Angular1+ES6时,控制器函数中未定义依赖注入,控制器是一个类
- 角度依赖注入,使用服务在模块之间传递值
- 如何使用JS(浏览器端)中的“require”和依赖注入,服务位置
- Angular ui-router 解析中的动态依赖注入
- Angularjs |依赖注入优于需要模块的优势
- AngularJS 依赖注入在哪里指定
- 如何在 Nodejs 中进行有效的依赖注入
- 无法解决条带角依赖注入
- Undefined不是函数和依赖注入
- Angular 指令是否需要将依赖注入到控制器中
- AngularJS中的依赖注入仅适用于Angular“对象”吗?
- 角度依赖注入,如果将控制器、服务等分离到单独的模块中