如何将对象传递给角度为2/4 app的NgModule中的服务构造函数

时间:2018-04-20 06:28:57

标签: javascript angular angular2-services

所以这是一个服务说MyService

MyService在其实现中有一个构造函数

@Injectable() 
export class MyService {
    constructor(myObject: MyClass) {}
}

现在myObject是MyClass类型,我需要在注入服务时传递

我可以使用MyService的一种方式是

_myService = new MyService(new Myclass())

然后访问MyService中的方法

this._myService.someMethod();

但是使用这种方法,我必须在使用MyService的每个组件中执行此操作

我想将值传递给提供者数组

中NgModule中的MyService构造函数

所以在我需要MyService的任何组件中我都可以使用

export class MyComponent {
    constructor( _myService: MyService) {}
    this._myService.someMethod();
}

2 个答案:

答案 0 :(得分:0)

一种方法是使用ValueProvider

使Myclass对象也成为可注射的
{ provide: Myclass, useValue: new Myclass() }

并将其添加到提供商。然后DI机制可以知道Myclass类型并正确注入。服务构造函数必须提供参数

的类型
export class MyService {    
   constructor(myObject: MyClass) {}    
}

并根据需要注入MyService

export class MyComponent {
   constructor( _myService: MyService) {}
}

此外,您可以在服务中创建该实例,如果它们对所有实例都相同,则从构造函数中省略。

答案 1 :(得分:0)

所以我想出了怎么做

可以通过以下方式使用useFactory来完成

{
  provide: MyService, 
  useFactory: MyServiceFactory  
}

export function MyServiceFactory() {
  return new MyService(new MyClass());
}

这将传递MyService构造函数所需的MyClass对象,并且此后可以将服务注入任何组件。

export class MyComponent {
  constructor( _myService: MyService) {}
}