angular - 仅用一个材料表组件处理不同的数据源
问题描述
我目前正在使用 Angular 来构建我的网站 - 熟悉 Angular 只是进行一些测试。
目前我被困在如何正确显示数据......我安装了材料,我正在使用材料表。我可以通过我创建的材料表显示一个来源的数据。
为此,我创建了两个组件:一个组件包含用于创建新数据条目的表单,第二个组件包含表格。现在我想创建第三个组件(又是另一个表单),它应该使用相同的材料表组件显示数据,但来自另一个服务的另一个 API 调用,而不是第一个表单组件。
是否可以仅使用一个材料表组件和表的 dataSource 属性来处理不同的 API 调用,或者我是否必须为每个表单组件创建一个表组件?我不认为这是这样做的方法
不幸的是,我没有开始的方法,所以我无法向您展示我已经尝试过的内容......如果有人告诉我如何处理这种情况的最佳实践,我将不胜感激。
提前致谢
解决方案
当然。使用材料表或任何其他组件都没有关系。我会分享一般的想法,我想这就足够了。
我想你有source
包含数据的属性,它绑定到材料表有点像这样:
<mat-table [source]='source"></mat-table>
当组件正在初始化时,您可以放置一个逻辑来根据某些参数选择要用作源的内容。我可以想象它可能是一个查询参数或路由参数。带有查询参数的示例:
export class MyComponent implements OnInit {
source$: Observable<MyData[]>();
constructor(private service1, private service2, activatedRoute: ActivatedRoute) {
}
ngOnInit() {
this.source$ = this.activatedRoute.queryParams.pipe(
pluck(QueryParamNames.dataSourceType),
distinctUntilChanged(),
map(async (dataSourceType: DataSourceType) => {
if (dataSourceType === DataSourceType.one) {
return this.service1.getData();
} else {
return this.service2.getData();
}
}),
);
}
}
<mat-table [source]='source$ | async"></mat-table>
我还利用async
管道来避免订阅和内存泄漏的喧嚣。async
管道非常适合它。
推荐阅读
- c# - 如何申请 Not In Linq?
- c++ - std::random_device 是否限制 g++ 上的实例数量?
- sql-server - 仅在最高值上的 SQL 连接表
- ios - 如何从 .ipa 文件中提取内容 (2018)
- excel - 选择 do-loop 的起始单元格
- sql - Entity Framework Core,自定义 sql 不选择期望值
- python - 正则表达式:在一个字符串中找到很多模式
- android - Android:过滤从 Firebase 填充的 recyclerview 项目
- ajax - Laravel 护照消费 api 与 js 不工作
- sql - 如何在 SQL 存储过程中使用读锁