2017-04-27 137 views
2

我想使用一個簡單的供應商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:[]

plnkr

回答

2

的提供程序的配置是否正確。 Calc構造函數中出現語法錯誤。的論點正確的聲明如下:

constructor (engine: Engine, car: Car){ 

這裏是更新plunker:

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

+2

感謝(太多C#)。那麼,如果在全局模塊範圍中已經知道「Car」和「Engine」,爲什麼我需要'deps'? –

+1

@Royi它決定了提供者需要什麼以及傳遞給工廠函數的參數的順序 –

+0

正如@peeskillet所說,有人應該告訴Angular哪些​​參數應該傳遞給工廠函數。 –

相關問題