外部模块的DI不工作

时间:2015-07-16 17:37:16

标签: angular typescript dependency-injection

我遇到外部模块的依赖注入问题:

export class DealsModel {

    foo() {
        console.log('foo');
    };
}

特别是这段代码:

import 'zone.js';
import 'reflect-metadata';
import 'es6-shim';
import { Component, View, bootstrap } from 'angular2/angular2';
import { DealsModel } from './models/dealsModel';

@Component({
    selector: 'search-form',
    viewInjector: [DealsModel],
})
@View({
    templateUrl: '/Deals/SearchForm'
})
class SearchFormComponent {

    constructor(da:DealsModel) {
        console.log(da);
    }
}

失败,因为.js生成(部分提交到此处)是:

SearchFormComponent = __decorate([
    angular2_1.Component({
        selector: 'search-form',
        viewInjector: [deals_Model_1.DealsModel],
    }),
    angular2_1.View({
        templateUrl: '/Deals/SearchForm'
    }), 
    __metadata('design:paramtypes', [DealsModel]) // <-- problem
], SearchFormComponent);
return SearchFormComponent;

基本上__metadata收到了错误的引用(应该得到deals_Model_1.DealsModel)现在这可以用这种方法解决:

import 'zone.js';
import 'reflect-metadata';
import 'es6-shim';
import { Component, View, bootstrap } from 'angular2/angular2';
import * as dm from './models/dealsModel';

@Component({
    selector: 'search-form',
    viewInjector: [dm.DealsModel],
})
@View({
    templateUrl: '/Deals/SearchForm'
})
class SearchFormComponent {

    constructor(da:dm.DealsModel) {
        console.log(da);
    }
}

bootstrap(SearchFormComponent);

但它显然是一个黑客。 现在的问题是,我应该提交一个问题还是我错过了一些明显的问题?

我正在使用alpha.31

1 个答案:

答案 0 :(得分:1)

  

现在的问题是,我应该提交一个问题,还是我错过了一些明显的问题

已经报告并修复:https://github.com/Microsoft/TypeScript/issues/3663

您现在可以使用ntypescript来解决此问题:https://github.com/TypeStrong/ntypescript