typescript - Angular:函数内成员变量未定义
我有以下服务,它有一个函数返回一个 Observable,因为它从另一个服务获取数据,进行转换,然后返回它(作为 Observable)。
@Injectable({
providedIn: 'root'
})
export class ReportColumnHeaderService {
constructor(private companyService: CompanyService) {}
public getColumnHeaderElements(variableDimensions: string[]): Observable<HeaderElement[]> {
return Observable.create(function(observer) {
this.companyService.getCompanies( (companies: Company[]) => {
let headerElements = getHeaderElements(companies);
observer.next(headerElements);
observer.complete();
});
});
}
}
问题是 this.companyService 在 function 内是未定义的。我读到如果我使用类似这样的 => 是可能的:
return Observable.create((observer) => {
this.companyService.getCompanies( (companies: Company[]) => {
let headerElements = let headerElements = getHeaderElements(companies);
observer.next(headerElements);
observer.complete();
});
});
但是那段代码无法编译。它显示 预期 0 个参数,但得到了 1 个。 有人能给我提示如何解决这个问题吗?
答案#1
假设 getCompanies 返回一个可观察对象,你在该函数上缺少 subscribe。正确的调用如下所示:
this.companyService.getCompanies().subscribe( (companies: Company[]) => {
答案#2
this.companyService.getCompanies( (companies: Company[]) => {
let headerElements = getHeaderElements(companies);
observer.next(headerElements);
observer.complete();
});
如果你想从服务获取数据,你需要使用订阅。最好的方法是在方法中或作为公共变量创建你的常量。例如
companies: Company[];
this.companyService.getCompanies.subscribe((res) => {
this.companies = res;
console.log(this.compmanies)
/** this is just simple exemple */
});
订阅可观察对象 请记住,可观察对象是惰性的。如果你不订阅,什么也不会发生。值得注意的是,当你订阅一个观察者时,每次调用 subscribe() 都会触发该观察者的独立执行。对同一个可观察对象的多个订阅者而言,订阅调用是不会共享的。 https://medium.com/@luukgruijs/understanding-creating-and-subscribing-to-observables-in-angular-426dbf0b04a3
当然,如果你创建了订阅,不要忘记取消订阅。
