在Angular中使用`useFactory`和`deps:[]`的正确方法是什么?
问题描述:
我想使用一个简单的供应商useFactory
这也将使用deps
(学习目的)。在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.
}
}
但是我得到一个错误:汽车没有定义
问:
我看不出使用deps:[]
的任何一点如果我已经声明,主要的应用模块模块(所以它在全球的应用是已知的),并在Calc
我导入这些类的类。
那么我该如何修复我的代码才能正确使用deps:[]
?
答
的提供程序的配置是否正确。 Calc
构造函数中出现语法错误。的论点正确的声明如下:
constructor (engine: Engine, car: Car){
这里是更新plunker:
感谢(太多C#)。那么,如果在全局模块范围中已经知道“Car”和“Engine”,为什么我需要'deps'? –
@Royi它决定了提供者需要什么以及传递给工厂函数的参数的顺序 –
正如@peeskillet所说,有人应该告诉Angular哪些参数应该传递给工厂函数。 –