Ich habe eine Typoskriptklasse, die ein Modell darstellt, und ich möchte, dass Instanzen über den Service Http
von angular mit einer API kommunizieren.Abhängigkeitsinjektion in Angular 2, wenn ein Konstruktor über Argumente verfügt
Der Konstruktor des Modells benötigt jedoch Argumente beim Erstellen von Instanzen. Zum Beispiel etwas super einfach:
class SomeModel{
constructor(public id:number, public name:string,){
}
Ich mochte den Http
Dienst injizieren, so dass es zu meinen Instanzen verfügbar ist, aber es scheint, wie der kanonische Weg, dies zu tun kommandiert den Konstruktor mit:
constructor(http:Http)
Ich habe durch die Injector
Dokumente gegraben, aber es ist ein wenig spärlich und ich habe nichts gefunden, was funktioniert. Gibt es eine Möglichkeit, einen Verweis auf einen Service wie Http
aus dem DI-System zu erhalten, ohne das Konstruktormuster zu verwenden?
Vielleicht könnten Sie 'provide' verwenden, wie wenn [Prüfung Http] (http://pastebin.com/UAJ3XeRf), aber es ist hässlich (; ich würde halte Modelle sauber und lasse die Komponenten Abrufen/Dienstleistungen ... – Sasxa
Danke, ich weiß, dass @Sasxa.Die Anwendung ist eine Reihe von verschiedenen Arten von Knoten, die in einer Grafik-DB über eine API gespeichert werden.Jede Art von Knoten hat eine etwas andere Anforderung und funktioniert gut, um dies als Unterklassen einer abstrakten Knotenklasse zu modellieren. Um zu speichern, kann ich einfach 'nodeInstance.save()' sagen, anstatt eine Menge Logik in einem Service zu haben, um zu bestimmen, um was für einen Knoten es sich handelt und wie man es und seine Beziehungen speichert/abruft. Es ist möglich, dass es ein falscher Ansatz ist, aber es scheint mir nachhaltig, wenn ich einen schöneren Weg finden könnte, die Http-Referenz zu bekommen. –
Ich habe durch Dokumente, insbesondere [http] (https://angular.io/docs/ts/latest/api/http/Http-class.html) und [xhrbackend] (https://angular.io /docs/ts/latest/api/http/XHRBackend-class.html), vielleicht [dies] (http://pastebin.com/bQcJALjA) wird für Sie arbeiten ... – Sasxa