Передать метод как параметр между компонентами и модулями в Angular 6 - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужно передать метод моего сервиса в качестве параметра.Структура папки выглядит следующим образом:

-app.module.ts

- МОДУЛЬ

| ___ main_component

- ОБЩИЙ МОДУЛЬ

| ___ shared_component

| ___ shared_service

Мой shared_service содержит только один метод и выглядит так:

@Injectable({providedIn: 'root'})
export class SharedService
{
    methodUrl = "some_http_url";

    constructor(private http: HttpClient) 
    {
    }

    getStatuses() : Observable<any>
    {
        return this.http.get<any>(this.methodUrl);
    }
}  

В моем main_component я создаю объект с именем data с функцией в качестве параметра

createData(){
    this.data = this.SharedService.getStatuses.bind(this);
}

и передать эти данные в мой shared_component как параметр @Input ().

И когда я пытаюсь вызвать его из моего ngOnOnit ()

export class SharedComponent implements OnInit{
    @Input() 
    data: any;

    result: any;

    constructor() {}

    ngOnOnit(){
        this.data.subscribe((response) => this.result = response)
    }
}

в консоли появляется сообщение об ошибке «TypeError: Cannot read свойство« get »of undefined».Я понял, что эта ошибка относится к return this.http.get (this.methodUrl); из-за неопределенности HttpClient.

Кто-нибудь сталкивался с этой ошибкой раньше и мог поделиться знаниямиоб этом?

1 Ответ

0 голосов
/ 03 декабря 2018

Вы, вероятно, должны передать объект SharedService, а не this в качестве контекста методу bind(), потому что getStatuses, кажется, работает, а не компонент.

createData(){
    this.data = this.SharedService.getStatuses.bind(this.SharedService);
}
...