在 Angular 6 中的组件和模块之间将方法作为参数传递

Pass method as parameter between components and modules in Angular 6

我需要将我的服务方法作为参数传递。文件夹结构如下所示:

-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 中,我创建了一个名为数据的对象,并将函数作为参数

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

并将该数据作为@Input() 参数传递给我的shared_component。

当我试图从我的 ngOnOnit() 调用它时

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

    result: any;

    constructor() {}

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

错误消息 "TypeError: Cannot read property 'get' of undefined" 出现在控制台中。我发现该错误指的是 return this.http.get(this.methodUrl); 因为 HttpClient 未定义。

有没有人遇到过这个错误并可以分享相关知识?

您可能应该将对象 SharedService 而不是 this 作为上下文传递给 bind() 方法,因为 getStatuses 似乎在服务中而不是组件。

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