Как я могу передать метод обслуживания в суперклассе из подкласса?У меня есть следующий сервис
import { Injectable, Injector } from '@angular/core';
import { HttpParams } from '@angular/common/http';
import 'rxjs/add/operator/map';
@Injectable
export class MyService {
constructor(private http: Httpclient) {}
getData(param1: string, param2: string): Observable<Model>{
let params = new HttpParams();
{...}
return this.http.get<Model>(this.baseUrl, { params })
.map((data) => new Model());
}
}
Класс A в качестве суперкласса
export ClassA implements OnChanges {
constructor(private _serviceMethod: (param1: string, param2: string) => Observable<Model>){}
ngOnChanges() {
this.getData(somedata, somedata);
}
getData(param1?: string, param2?: string) {
this._serviceMethod(param1, param2)
.subscribe((response: Model) => {
this.data = response;
}, (error) => {
{...}
});
}
}
и ClassBComponent в качестве подкласса
@Component({
selector: 'class-b',
templateUrl: 'class-b.component.html',
styleUrls: ['class-b.component.css'],
})
export ClassBComponent extends ClassA {
constructor(private myService: MyService){
super(myService.getData);
}
}
ClassBComponent
является одним из многих компонентов, которыерасширяет ClassA
и разделяет некоторую логику в getData(somedata, somedata)
методе ClassA
.Теперь, если я сделаю это
this.http.get
in MyService
, выведите "TypeError: Невозможно прочитать свойство 'get' of undefined".Мой http
типа HttClient
не определен, даже если он внедрен в конструктор MyService
, поскольку 'this'
в MyService больше не получает ссылку на службу и указывает на ClassBComponent.Как я могу связать экземпляр MyService и использовать его, когда я передаю методы в super()
подклассов?У вас есть идеи, как я могу это сделать?Спасибо:)