在 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);
}
我需要将我的服务方法作为参数传递。文件夹结构如下所示:
-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);
}