2016-03-14 6 views
6

Wenn ich versuche, eine Anweisung aus einer anderen Datei zu importieren, erhalte ich den Fehler EXCEPTION: No Directive annotation found on MyComponent - wie man das löst?Angular2 - Fehler erhalten als: `AUSNAHME: Keine Richtlinie Anmerkung gefunden auf MyComponent`

hier ist mein Code:

app.component.ts:

import {Component} from 'angular2/core'; 
import {MyComponent} from "./app.my-component" 

@Component({ 
    selector: 'app', 
    template: ` 
     <h1>Hellow World</h1> 
     <span>Here is your component:</span> 
     <my-component></my-component> 
    `, 
    directives: [MyComponent] 
}) 

export class AppComponent { } 

app.mycomponent.ts:

import {Component} from 'angular2/core'; 

@Component({ 

    selector : 'my-component', 

    template : `<h2>This is from My component</h2>` 

}); 

export class MyComponent { }; 

Aber ich bin immer Fehler wie: No Directive annotation found on MyComponent wie zu lösen Dies?

+0

'importieren Sie {MyComponent} von" ./app.my-component "' Ist das der korrekte Export Ihrer Komponente? – micronyks

+0

Vielleicht müssen Sie sicherstellen, dass der Pfad relativ zum Ordner Ihrer App root ist, nicht von wo Sie die Komponente erstellt haben. Etwas wie 'import {MyComponent} from" ../ app.my-component "' oder einfach 'import {MyComponent} von" ./app.my-component "' – John

+0

@john Beide Dateien sind nur im selben Ordner – 3gwebtrain

Antwort

29

Sie sollten ; nach Schließen der Komponente Component Direktive Klammer entfernen.

import {Component} from 'angular2/core'; 

@Component({ 

selector : 'my-component', 

template : `<h2>This is from My component</h2>` 

}) 
export class MyComponent { }; 
+0

Ich habe entfernt, aber immer noch nicht funktioniert – 3gwebtrain

+0

Ist Ihr Dateiname "app.mycomponent.ts" oder "app-mycomponent.ts"? –

+0

mein Dateiname ist 'app.my-component.ts' - – 3gwebtrain

0

Vielleicht müssen Sie stattdessen einen relativen Pfad erstellen. Es hängt davon ab, wo die Komponente, die Sie importieren möchten, ist relativ befindet, um das Skript Sie die Komponente importieren in. So etwas wie

import {MyComponent} from "../app.my-component"

oder

import {MyComponent} from "./app.my-component".

Es wäre hilfreich, wenn Sie auch Ihre Ordnerstruktur gepostet haben.

+0

wenn ich 'import {MyComponent} von" ../ app.my-component ";' dann benutze ich Fehler als: systemjs löst Fehler wie folgt aus: 'http: // localhost: 3001/app.my -component 404 (Not Found) 'falls ich Ihren zweiten Vorschlag verwende bekomme ich einen Fehler als 'No Direction Annotation on MyComponent' gefunden – 3gwebtrain

+0

Sorry, ich konnte nicht helfen. Schau dir den Code aus diesem Blogpost an: http : //blog.edenmsg.com/angular2-typescript-gul p-und-expressjs /. Vielleicht finden Sie daraus die Quelle für Ihre Probleme. Ich habe diesen Beitrag als Referenz bei der Erstellung meiner ersten eckigen 2-Anwendung verwendet. – John

0

oke, ich lerne auch immer noch dazu, aber ich habe die gleiche Nachricht wie Sie. Ich glaube, ich löste es ...

fand meine Antwort hier: https://angular.io/docs/ts/latest/guide/attribute-directives.html

diese zu Ihrem app.mycomponent.ts hinzufügen:

import {Directive} from 'angular2/core'; 

und die Richtlinie hinzufügen:

@Directive({ 
    selector: '[MyComponent]' 
}) 

hoffe das hilft dir ein bisschen.

wieder nicht sicher, ob dies der richtige Weg ist ...

+0

euh, also nach dem Löschen dieser Lösung von meinem Code, weil ich nicht glücklich damit war als die "Endlösung", ich dachte, es würde wieder abstürzen ... aber es nicht ... sehr, sehr komisch. Cache-Problem vielleicht? – Sander

0

In meinem Fall war es ein Problem mit dem Export einer bestimmten Klasse, und der Einfuhr dieser Klasse in anderen Komponenten.

Dieser Fehler wurde jedoch nicht explizit angezeigt, sondern als Ausnahme in EXCEPTION: No Directive annotation... in der Konsole.

Um ausdrücklich diesen Fehler zu erhalten:

  1. Stoppen Sie den lokalen Server
  2. Re-run npm start

eventuelle Mängel, die vorher versteckt (die Winkelquickstart Setup vorausgesetzt) ​​sind, werden sofort auftauchen.

Verwandte Themen