angular - 从父组件获取结果时,有没有比 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);
}
解决方案
在您的父组件中,您可以注入一个获取数据的服务。
代替:
return this.emitToServer(pageIndex);
做
return this.tableDataService.fetch(pageIndex);
在您的父组件中:
@Component({
providers: [MyUserTableDataService]
})
class MyParentComponent {
...
}
请参阅:https ://angular.io/guide/providers#limiting-provider-scope-with-components
推荐阅读
- javascript - 如何让我的图像在 React+Typescript 的 Material UI Cards 中呈现
- angular - Ionic 添加了新页面,但显示 No provider for NavParams
- json - AWS CloudFormation 用户数据 \; 和新行(JSON)
- php - Laravel 7 从包含的布局或组件中提取 css / js
- java - Java将许多对象字段值设置为null的最佳方法
- python - 正则表达式:交流发电机订单问题
- python - 如何在 Xampp 上解决 Python 的服务器错误 500
- vue.js - Vue 输入输入值,移动到下一个字段
- java - 如何使用存储在 char 中的符号进行算术运算
- c++ - 在某些情况下需要的假设声明中的名称查找规则是什么