2015-11-13 212 views
1

我已經閱讀了幾篇關於依賴注入的文章,似乎無法按照我認爲它應該的方式工作。從我已閱讀,你可以使用一個類@Injectable裝飾,然後將元數據爲DI創建像這樣:Angular 2依賴注入

import {Hero} from './hero.model'; 
import {Injectable} from 'angular2/angular2' 

@Injectable() 
export class HeroService { 
    constructor() { 
     console.log('Hero Service Created'); 
    } 
} 

然後在你的組件,你可以在構造函數中使用它(用正確的進口)是這樣的:

constructor(heroService: HeroService) { 
    console.log('App Component Created'); 
} 

不過,我得到以下錯誤:無法解析AppComponent(所有參數)?確保他們都有有效的類型或註釋。

我能得到它正常工作,如果我從服務中刪除@Injectable語法,而是有我的構造是這樣的:

constructor(@Inject(HeroService) heroService: HeroService) { 
    console.log('App Component Created'); 
} 

有了一切,我讀過,這些應該做的同樣的事情,但他們不是。任何想法爲什麼?我在VS 2013中使用Typescript 1.6.2,angular 2 v2.0.0-alpha.46和systemjs v0.19.5。

回答

2

確保您在TypeScript配置中指定了「emitDecoratorMetadata」選項。

+0

這是我唯一能想到的。 @Rob這裏是一個簡單的服務與工作DI基本plunker。汽車部件使用汽車服務。 http://plnkr.co/edit/8ILuwhtxAP3g9o6u6jAQ?p=preview –

+0

這讓我朝着正確的方向前進。由於我在visual studio中開發並編譯我的TS文件,所以我不得不將其添加到我的csproj文件中: $(TypeScriptAdditionalFlags)--emitDecoratorMetadata

+0

更好的是,將它添加到您的csproj文件,以便在保存時編譯,而不僅僅在構建時編譯: true