Я никогда не сталкивался с этой ошибкой раньше, и я не уверен, является ли это ошибкой машинописного текста или я что-то не так делаю с Angular.
У меня есть класс, который имеет следующее метод внутри него
assignTenantLocationDataToTable(tenant:Tenant): void {
this.isLoadingTenantData = true;
this._locationService.getLocationDataForTenantId(tenant.id).pipe(
takeUntil(this.destroyObservables)
).subscribe(res => {
console.log(res);
})
}
Этот метод вызывает метод this._locationService.getLocationDataForTenantId()
в службе определения местоположения. Что выглядит следующим образом:
getLocationDataForTenantId(tenantId: string): Observable<Where[]> {
const url = this._configService.getConfig().baseUrl +
`${this._urlPrefix}/tenant/${tenantId}/locations`;
return this._http.get<Where[]>(url, { observe: "response" })
.pipe(
map(response => response.body),
catchError(err =>
handleRequestErrors(
err,
this._noDataUIErrorMessage,
this._snackbarService
)
)
);
}
Однако, когда я запускаю этот код, я получаю следующую ошибку:
VM46956 LocationsListComponent.ngfactory.js:262 ERROR TypeError: this._locationService.getLocationDataForTenantId is not a function
at LocationsListComponent.assignTenantLocationDataToTable (VM46693 main.js:4888)
at LocationsListComponent.changeSelectedTenant (VM46693 main.js:4884)
Если я затем изменю getLocationDataForTenantId
, чтобы он лямбда-функция, и поэтому подпись выглядит следующим образом
getLocationDataForTenantId = (tenantId: string): Observable<Where[]> => { ... }
Код работает нормально?
Что дает? Я делал много машинописи раньше и никогда не сталкивался с этой проблемой. Почему я не могу просто вызвать свой метод, так как в остальное время я использовал машинопись?
Я вызываю метод внутри компонента, который затем вызывает второй метод внутри службы. Оба эти метода содержатся в классах. Почему это заставляет меня использовать лямбду?
Редактировать:
Компонент выбора арендатора
ngOnInit() {
this.selectedTenant.emit(this.tenantListFormControl.value);
}
Шаблон списка местоположений
<app-tenant-picker
[label]="getTranslateKey('tenants') | translate"
(selectedTenant)="changeSelectedTenant($event)"
(errorEmitter)="handleErrorEvent($event)">
</app-tenant-picker>
Компонент списка местоположений
changeSelectedTenant(tenant: Tenant) {
this.currentTenant = tenant;
this.assignTenantLocationDataToTable(tenant);
}
assignTenantLocationDataToTable(tenant:Tenant): void {
this.isLoadingTenantData = true;
this._locationService.getLocationDataForTenantId(tenant.id).pipe(
takeUntil(this.destroyObservables)
).subscribe(res => {
console.log(res);
})
}