2015-11-02 11 views
7

Próbuję połączyć trochę angular2 aplikacji: nie używam maszynopis, ale raczej regularne ES6 z babelAngular2: Nie Dyrektywa adnotacja znaleźć na MyComponent

moich plików wygląda następująco:

//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); 

ten następnie zostanie skompilowany z użyciem WebPacka babel ładowarka z dwoma ustawieniami włączona ['es2015', 'stage-1']

gdy prowadził w przeglądarce to daje następujący błąd:

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

Próbowałem oczywiste dodanie adnotacji @Directive() do MyComponent, ale to nie miało wpływu.

+2

'@ Directive' jest adnotacja i czystego maszynopis. Nie ma odpowiednika JavaScript. Dekoratory w ES7 (!) To coś innego. Więc kiedy używasz '@ Component' używasz TypeScript. – zeroflagL

Odpowiedz

3

Odpowiadając na moje własne pytanie:

po kawałku dochodzenia okazało się, że Babel emituje inny kod adnotacji/dekoratorów niż maszynopis robi, dlatego nie mogą być używane jak wyżej.

Zamiast tego, zamiast używać dekoratorów, możliwe jest, aby zadeklarować właściwości statyczne na klasie, która zwróci tablicę instancji dekorator:

class MyComponent { 

    ... 

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

Jestem przekonany, że powinno to być możliwe także dzięki dekoratorom ES7. Sprawdź https://github.com/angular/angular/issues/3470 – estus

+0

Miałem ten sam problem, wyczyściłem pamięć podręczną przeglądarki i błąd zniknął. Może ktoś uważa to za pomocne –

Powiązane problemy