在Angular中使用`useFactory`和`deps:[]`的正确方法是什么?

时间:2017-04-27 07:47:26

标签: javascript angular

我想使用useFactory的简单提供商,该提供商也会使用deps学习目的)。

所以我创建了这个plnkr

//app.module.ts
...
const randomFactory = (car,engine) => { return new Calc(car,engine);  };
 ...
 providers: [Car,Engine, 
             { provide: 'Random', 
               useFactory: randomFactory ,  
               deps: [Car, Engine],
             },
            ]

Calc的位置:

export class Calc
{
  car:Car;
  engine:Engine;

  constructor ( Engine engine, Car car)
   {
    this.car=car;
    this.engine=engine;
   }
  doSomething(){alert(this.car.getInfo() + this.engine.getInfo()}
}

现在我想将它用作注入对象,所以我这样做了:

export class AppComponent {
  constructor(@Inject('Random') r) {
    r.doSomething(); //should alert "car data + engine data" , but I get an error.
   }
}

但我收到错误: car未定义

问题:

我没有看到使用deps:[]的任何意义如果我已经在主app模块中声明了模块(因此在全局应用程序中已知)和Calc我导入这些类的类。

那么如何修复我的代码以正确的方式使用deps:[]

plnkr

1 个答案:

答案 0 :(得分:2)

提供商配置是正确的。您在Calc构造函数中遇到语法错误。参数的正确声明如下:

constructor (engine: Engine, car: Car){

这是更新的plunker:

https://plnkr.co/edit/HsECR0HEcIaPNbK6A7ZZ?p=preview