2015-11-13 177 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