如何使用systemjs和Angular2导出typescript枚举?

时间:2016-01-03 22:16:59

标签: angular typescript systemjs

我试图将Angular2与system.js和typescript一起使用。它到目前为止我一直在导出的接口工作正常,但是一旦我尝试导入枚举,它就会爆炸。在以下代码中,Card工作正常,但当我导入Legend时,我收到错误GET http://localhost:3000/shared/legend 404 (Not Found)

import {Component, OnInit} from 'angular2/core';
import {CardService} from './card.service';
import {Card} from '../../shared/card';
import {Legend} from '../../shared/legend';

@Component({
    selector: 'cards-list',
    templateUrl: 'app/cards-list.html',
    providers: [CardService]
})
export class CardsListComponent implements OnInit {
    public cards:Card[];

    //using Legend is the problem!
    public legendValues:String[] = [Legend[Legend.ARIANE]];

    constructor(private _cardService:CardService) {
    }
    getCards() {
        this._cardService.getCards(cards => this.cards = cards);
    }
    ngOnInit() {
        this.getCards();
    }
}

这是图例文件:

export enum Legend {
    THE_RAPTOR,
    LINZA,
    ARIANE,
    OZAN
}

为什么我无法导入普通枚举?

3 个答案:

答案 0 :(得分:3)

  

到目前为止我一直在导出的接口工作正常,但是一旦我尝试导入枚举,它就会爆炸

接口是仅编译时构造,因此没有运行时影响。带有接口的文件未在运行时加载。但是,在运行时加载具有运行时内容的文件,例如classes / variables / enums 等,您将获得404。这是服务器设置错误。您需要允许加载这些JS文件。

答案 1 :(得分:1)

我有一个非常类似的问题,并最终通过在我的枚举之前导出一个'虚拟'类来修复它...

`

导出类L {};

export enum Legend {     THE_RAPTOR,     LINZA,     阿丽亚娜,     OZAN }

...

从'../../shared/legend'导入{L,Legend}; `

不幸的是我不能说为什么这是必要的(虽然我看到没有课的枚举不允许为什么不这样做?!)但它帮助了我。

答案 2 :(得分:0)

在下面的代码中,我将演示如何 EXPORT 类( constClass )包含const列表可以在您的班级服务中使用。

-serviceAngularClass.js -

    ...
    import {WsRessources} from "./constClass";

            @Injectable()
            export class PersonneService {...

        public functionName():Observable<any>{
            return this.updateRessource(WsRessources.BasePath+WsRessources.affectLeavingDate...);


        }
}//end Class  

-constClass.js -

    export class WsRessources {
        public static BasePath='personnes';
        public static affectLeavingDate='/affectLeavingDate';
     }