У меня есть этот составная часть, который передает метод другому составная часть. Делалось это так:
constructor(
public categoryData: CategoryDataService
) {
}
И html для передачи метода выглядел так:
[list] = "categoryData.list"
Это работало нормально, пока у метода list не было параметров.
Теперь у меня есть метод, у которого есть параметры, но я могу получить параметры из составная часть, поэтому я создал такой метод-оболочку:
listCriteria() {
this.criteriaData.list(this.category.id);
}
Но когда я добавляю этот html:
[list] = "listCriteria"
дает мне ошибку:
ERROR TypeError: Cannot read property 'list' of undefined
Для справки вот как выглядит сервис:
import { Injectable } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http/src/response';
import { environment } from '../../environments/environment';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import { ICriteria } from './interfaces/criteria.shared';
const API_URL = environment.apiUrl;
const API_Path = '/criteria';
@Injectable()
export class CriteriaDataService {
constructor(private _http: HttpClient) { }
public list = (categoryId: string, includes?: string): Observable<ICriteria[]> => {
return this._http
.get<ICriteria[]>(API_URL + API_Path, { params: { categoryId: categoryId, includes: includes || '' } })
.catch(this.handleError);
}
private handleError(error: HttpErrorResponse) {
return Observable.throw(error);
}
}





Ключевое слово функции this в JavaScript ведет себя немного иначе.
Значение this определяется тем, как вызывается функция.
Когда вы передаете функцию другому компоненту, вы должны убедиться, что он будет вызываться с правильным контекстом.
Самый простой способ сделать это - просто использовать тот же метод, который вы использовали в своей службе: функция стрелки экземпляра
listCriteria = () => this.criteriaData.list(this.category.id);
Таким образом, this будет ссылаться на правильный экземпляр компонента.