Ich habe eine Reihe von angle2-Komponenten, die alle einen Service erhalten sollten. Mein erster Gedanke war, dass es am besten wäre, eine Superklasse zu schaffen und den Service dort zu injizieren. Jede meiner Komponenten würde dann diese Oberklasse erweitern, aber dieser Ansatz funktioniert nicht.
Vereinfachtes Beispiel:
export class AbstractComponent {
constructor(private myservice: MyService) {
// Inject the service I need for all components
}
}
export MyComponent extends AbstractComponent {
constructor(private anotherService: AnotherService) {
super(); // This gives an error as super constructor needs an argument
}
}
Ich könnte dies lösen, indem ich MyService
in jede einzelne Komponente einspritze und dieses Argument für den super()
Aufruf verwende, aber das ist definitiv eine Art Absurdität.
Wie organisiere ich meine Komponenten richtig, damit sie einen Service von der Superklasse erben?
new MyService()
anstelle der Injektion liefert genau das gleiche Ergebnis (außer effizienter). Wenn Sie dieselbe Dienstinstanz für verschiedene Dienste und / oder Komponenten freigeben möchten, funktioniert dies nicht. Jede Klasse erhält eine andere MyService
Instanz.
myService
. Es wurde eine Lösung gefunden, die dies vermeidet, aber den abgeleiteten Klassen mehr Code hinzufügt ...