2015-11-02 12 views
7

では見つかりませんでした指令注釈私は一緒に少しangular2アプリを入れしようとしている:Angular2:MyComponentの

: 私は活字体を使用してではなく、定期的なES6ないよバベルと

私のファイルは、次のようになります

:ブラウザでこの生成し、次のエラーを実行したときに、この2つのプリセットでバベル・ローダーを使用してのWebPACKでコンパイルさ
//mycomponent.js 
import { Component, View } from 'angular2/angular2'; 

@Component({ 
    selector: 'my-app' 
}) 
@View({ 
    template: '<h1>My First Angular 2 App</h1>' 
}) 
class MyComponent { 
    constructor() { 
    } 
    get prop() { 
    return 'hello'; 
    } 
} 

export { MyComponent }; 


// index.js 
import 'zone.js'; 
import 'reflect-metadata'; 

import { MyComponent } from './mycomponent'; 
import { bootstrap } from 'angular2/angular2'; 

bootstrap(MyComponent); 

['es2015', 'stage-1']を有効に0

EXCEPTION: Error during instantiation of Token Promise!.
ORIGINAL EXCEPTION: No Directive annotation found on MyComponent

私はMyComponentのに明白な追加@Directive()注釈を試してみましたが、それは効果がなかったです。

+2

'Directive' @は、注釈、純粋な活字体です。 JavaScriptに相当するものはありません。 ES7(!)のデコレータは、何か違うものです。ですから、 '@ Component'を使うときはTypeScriptを使います。 – zeroflagL

答えて

3

自分の質問に答える:私はバベルが活字体が行うよりも、注釈/デコレータのための異なるコードを発することが判明調査のビットの後

、したがって、それは上記のように使用することはできませんが。

代わりに、むしろデコレータを使用するよりも、デコレータのインスタンスの配列を返すクラスの静的プロパティを宣言することが可能である:

class MyComponent { 

    ... 

    static get annotations() { 
    return [ 
     new Component({ 
     selector: 'my-app' 
     }), 
     new View({ 
     template: '<span>My First Angular 2 App</span>' 
     }) 
    ]; 
    } 
} 
+1

私はそれがES7デコレータでもできるはずだと確信しています。 https://github.com/angular/angular/issues/3470を確認してください – estus

+0

私は同じ問題を抱えていました。私はブラウザのキャッシュをクリアしてエラーが消えました。おそらく誰かがこれが役に立つと思うかもしれません –