In meiner Suche von Vererbungs Klasse passieren zu müssen Angular2 zu lernen, ich kam über die folgende Situation:Verwenden Abhängigkeit in Basisklasse ohne diese Abhängigkeit
- 1 Basisklasse, die die angular2/http Abhängigkeit verwendet
- 1 inheriting Klasse, welche die Basisklasse
wie kann ich die angular2/HTTP-Abhängigkeit in der Basisklasse Konstruktor injizieren, ohne dass passieren http als Parameter erstreckt, wenn die erbenden Klasse instanziieren.
Ich benutze http nicht in der erbenden Klasse, also will ich es nicht dort sehen!
Zum Beispiel
// base class
class CRUDService {
// http is used in this service, so I need to inject it here
constructor(@Inject(Http) http) {}
findAll() {
return this.http.get('http://some.api.com/api/some-model');
}
}
// inheriting class
class ThingService extends CRUDService {
constructor() {
// because we extend the base class, we need to call super()
// this will fail since it expects http as a parameter
// BUT i don't use http in this class, I don't want to inject it here
super();
}
}
Idealerweise würde ich erstellen Sie einfach eine neue HTTP-Instanz in der Basisklasse und verwenden wie so let http = new Http();
, aber das offensichtlich nicht funktioniert.
Sie müssen es in die erbende Klasse injizieren, aber wenn es hilft, können Sie auf es von der Basisklasse zugreifen und so etwas wie tun '( this) .http.get (...)' (Sie brauchen nicht um es explizit über 'super()' zu übergeben. –
rinogo