Angular4 Komponenten, Vererbung, abstrakte Klasse
Möchte ich definieren als Basisklasse für meine Komponenten zu teilen einige Merkmale. Also habe ich begonnen mit :
export abstract class BaseComponent {
protected getName(): string;
}
@Component(...)
export class MyComponent extends BaseComponent {
protected getName(): string {
return "MyComponent";
}
}
Aber nach brauchte ich, um einige Anmerkungen zu BaseComponent wie @HostListener('window:keydown', ['$event'])
. So musste ich hinzufügen @Component
zu BaseComponent
zu aktivieren eckig Anmerkungen. Alles war gut... Bis ich versucht zu kompilieren, in der Produktion Modus mit
ng build --prod
:
Nicht bestimmen kann, das Modul für die Klasse BaseComponent
So, ich habe BaseComponent
zu @NgModule
, aber ich hatte :
Keine Vorlage angegeben, die für die Komponente BaseComponent
So, ich habe
@Component({template: ''})
Aber ich hatte :
Argument vom Typ 'typeof BaseComponent' nicht zuordenbar parameter von Typ 'Typ'. Nicht zuordnen einer abstrakten Konstruktor-Typ eine nicht-abstrakte Konstruktor geben.
Also musste ich entfernen die "abstract
" keyword zu kompilieren in der Produktion Modus mein Projekt.
Haben Sie eine Lösung? , Die ich nicht mag schlechte Vorstellung!
InformationsquelleAutor Chklang | 2017-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Notwendigkeit zum hinzufügen von @Komponente() Anmerkungen zu abstrakten Klassen oder registrieren Sie zu jedem Modul.
Könnte es sein, dass es etwas falsch in Ihrem code, der nicht konform mit dem, was Eckig erwartet.
Erstellte ich eine demo-Anwendung mit Angular CLI-1.2.7 mit der
ng new <name>
Kommando und erweitern Sie das AppComponent Klasse als unten.Basis.Komponente.ts
und
app.Komponente.ts
App.Modul-Klasse nicht in irgendeiner Weise geändert.
Den click-handler befindet sich in der Basis-Komponente funktionierte ohne Probleme. Ein AOT-Zusammenstellung mit
ng build --prod
auch nicht geben, keine Fehler.Diese demo wurde mit Winkel-v5.1.1
Sehr Froh, dass dein Problem gelöst wurde!
Die Sache ist die, dass im Falle der abstrakten Klasse eine andere Klasse erweitert, die eine Komponente, dann Eckige benötigen, um die Klasse deklarieren Sie in einem Modul, die dann scheitern, weil Sie kann nicht erklären, abstrakte Klassen in Eckig. 🙁
dann gibt es keine Lösung mehr kommen?
verstehen Sie nicht die Diskussion. Es gibt keine konkrete Komponente zu vererben. Wir sprechen von einer abstrakten Oberklasse, die nicht mit Anmerkungen versehen, mit der
@Component
annotation. Und ja. Winkel-4 riecht manchmal, ich gebe Ihnen, dass. Aber trotzdem ist es ein Idealer Rahmen, trotz der Mängel.InformationsquelleAutor JeanPaul A.