Angular service TypeError: Метод не является функцией, форсируя лямбда-функцию вместо метода - PullRequest
0 голосов
/ 24 марта 2020

Я никогда не сталкивался с этой ошибкой раньше, и я не уверен, является ли это ошибкой машинописного текста или я что-то не так делаю с 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);
    })
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...