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

时间:2018-12-03 14:44:02

标签: angular angular-httpclient

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

-app.module.ts

-模块

| ___ main_component

-共享模块

| ___ shared_component

| ___共享服务

我的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);
}

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

当我尝试从ngOnOnit()调用它时

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

    result: any;

    constructor() {}

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

控制台中显示错误消息“ TypeError:无法读取未定义的属性'get'”。我发现该错误是返回this.http.get(this.methodUrl)的原因,因为HttpClient未定义。

任何人都曾经遇到过该错误并且可以分享有关该错误的知识吗?

1 个答案:

答案 0 :(得分:0)

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

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