Angular 角度组件之间的数据流问题

Angular 角度组件之间的数据流问题,angular,angular-material,Angular,Angular Material,我的网页结构如下: 按钮应选择/取消选择表中的所有行 按钮和表格是注入页面的独立组件 表正在使用材料的选择模型 从页面中,我将进入选择。通过@ViewChild装饰器选择表中的。在页面中放置选择逻辑很容易,因为它是表的注入位置,但这需要在按钮需要的每个页面中放置相同的逻辑。 我想通过将逻辑放在Button组件中来简化这一点,因此,要实现这一功能,只需将其选择器插入页面的模板中即可。但有一个陷阱我无法克服: 如何到达选择。从按钮组件中选择表的? 实现这一目标的最佳实践是什么 下面是它在Pag

我的网页结构如下:

  • 按钮应选择/取消选择表中的所有行
  • 按钮和表格是注入页面的独立组件
  • 表正在使用材料的
    选择模型
从页面中,我将进入
选择。通过
@ViewChild
装饰器选择表中的
。在页面中放置选择逻辑很容易,因为它是表的注入位置,但这需要在按钮需要的每个页面中放置相同的逻辑。
我想通过将逻辑放在Button组件中来简化这一点,因此,要实现这一功能,只需将其选择器插入页面的模板中即可。但有一个陷阱我无法克服:

如何到达
选择。从按钮组件中选择表的

实现这一目标的最佳实践是什么

下面是它在Page类中的外观

@ViewChild(TableComponent)
私有表:TableComponent;
// ...
checkAll():void{
const numSelected=this.table.selection.selected.length;
const numRows=this.table.dataSource.data.length;
const result=numSelected==numRows;
后果
?此.table.selection.clear()
:this.table.dataSource.data.forEach(row=>this.table.selection.select(row));
}
下面是模板html文件:

全部检查

使用带有RxJS主题的服务。可以在按钮组件和表组件中注入服务。通过构造函数。当按钮按下时 单击可触发表组件订阅的服务主题。谷歌“主题服务”


或者,您可以创建一个包含按钮和表格的组件。这样,按钮就不需要是组件。按钮点击逻辑只能实现一次。

您可以利用RxJS的
主题
,将其投入使用,并通过构造函数将其注入到按钮和表组件中。
您的服务实现可能如下所示:

//服务
导出类表服务{
私人事件:主题=新主题();
public event$=this.event.asObservable();
公共事件(事件?:MouseEvent):无效{
this.event.next();
}
}
然后获取此服务并将其注入按钮组件:

//按钮组件
导出类按钮{
构造函数(私有表服务:表服务){}
update():void{
this.tableService.emitEvent();
}
}
您可以在html模板文件中单击激活update()函数。
然后在表中实现选择逻辑,只需使用
事件$
触发它:

//表组件
导出类表{
构造函数(私有表服务:表服务){
this.tableService.event$.subscribe(()=>this.checkAll());
}
checkAll():void{
//你的选择逻辑在这里
}
}

请显示您当前的实施情况。没有它,人们只能猜测。我不需要完全实现解决方案,只需要一种思维方式;)总之,我在问题中添加了代码示例。因此,我想,服务是一种方式。问题是按钮组件将非常专用。如果您认为您需要星座图:“一个表和一个按钮来选择表中的所有行”,那么这应该是组件。但是我建议你在拥有第二个使用案例之前不要创建任何组件,就像我所寻找的那样:)谢谢你,好撒玛利亚人