如何从子类中传递超类中的服务方法? 我有下一个服务
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
中的 MyService
抛出&#34; TypeError:无法读取属性&#39; get&#39;未定义&#34;。即使在http
构造函数中注入,HttClient
类型MyService
也未定义,因为MyService中的'this'
不再获得服务引用并指向ClassBComponent。我如何绑定MyService的实例并在我传递子类super()
中的方法时使用它?你知道我怎么能这样做吗?谢谢:))
答案 0 :(得分:0)
如果一个函数应该用作回调(事件监听器等),它最好应该绑定在类构造上,例如使用bind
或箭头功能。
由于getData
不应该是一个回调,而是像一个回调一样使用,它应该就地绑定:
export ClassBComponent extends ClassA {
constructor(private myService: MyService){
super(myService.getData.bind(myService));
}
}