首页 > 解决方案 > 从父组件获取结果时,有没有比 EventEmitter 更好的方法?

问题描述

我使用材料表创建了一个可重用的组件,我想将所有共享逻辑保留在我的基础组件中(可重用)。但是,在服务器端分页时,我需要从自定义组件中调用列表方法并获取其结果,以便在基础组件中进行处理。出于这个原因,我尝试使用EventEmitter但没有设法返回结果。那么,有没有更好的方法,例如使用BehaviourSubject从自定义组件调用和获取结果到基础组件?或者有什么更聪明的方法?

基础组件:

  ngAfterViewInit(): void {
  this.matSort.sortChange.subscribe(() => pageIndex = 0);

  merge(this.matSort.sortChange, this.matPaginator.page)
    .pipe(
      startWith({}),
      switchMap(() => {
        return this.emitToServer(pageIndex);
      }),
      map(data => {
        return data.items;
      })
    ).subscribe(data => this.data = data);
}


emitToServer(index) {
    this.getData.emit(index);
}

标签: angularrxjsangular-materialeventemitter

解决方案


在您的父组件中,您可以注入一个获取数据的服务。

代替:

 return this.emitToServer(pageIndex);

  return this.tableDataService.fetch(pageIndex);

在您的父组件中:

@Component({
  providers: [MyUserTableDataService]
})
class MyParentComponent {
  ...
}

请参阅:https ://angular.io/guide/providers#limiting-provider-scope-with-components


推荐阅读