Javascript 角度绑定@输入行为无法正常工作

Javascript 角度绑定@输入行为无法正常工作,javascript,angular,typescript,binding,Javascript,Angular,Typescript,Binding,我在AngularEventEmitter和Angular@Input方面遇到一些问题 我的应用程序有三个组件:两个组件(TableComponent和MapComponent)之间不进行交互,另外一个组件类似于这两个组件的父亲(BodyComponent) TableComponent定义了以下@Input _oportunidades: Item[]; @Input() set oportunidades(oportunidades: Item[]){ debugger;

我在Angular
EventEmitter
和Angular
@Input
方面遇到一些问题

我的应用程序有三个组件:两个组件(
TableComponent
MapComponent
)之间不进行交互,另外一个组件类似于这两个组件的父亲(
BodyComponent

TableComponent
定义了以下@Input

  _oportunidades: Item[];
  @Input() set oportunidades(oportunidades: Item[]){
    debugger;
    this._oportunidades = oportunidades;
    this.dataSource = new MatTableDataSource<Item>(this._oportunidades);
    this.dataSource.paginator = this.paginator;
  }
当程序
将新地图信息发送到车身时
被触发。将修改后的数据发送到
车身组件
BodyComponent
捕获它时没有错误。
BodyComponent
html如下所示:

<div class="analysis">
  <app-mapa (event_emitter_for_items_filtered_by_polygon)="items_filtered_by_polygon($event)" [items]="map_data"></app-mapa>
  <app-tabla [oportunidades]="oportunidades_filtradas"></app-tabla>
</div>
变量
oportunidades\u filteradas
绑定到
TableComponent
中的
oportunidades
变量(如
BodyComponent
html所示),当
items\u polygon
方法更改
oportunidades\u filteradas
时,
@Input()设置oportunidades(oportunidades:Item[])
未被触发。因此,my
TableComponent
中没有显示任何更改

当应用程序启动,数据通过组件分发时,一切都按预期进行。就在这种情况下,当试图按照说明修改
TableComponent
内容时,什么也没有发生

在chrome的devtools控制台中,没有显示任何错误。应用程序的流程并不奇怪,只是什么都没发生。 有时,我们认为修改正在进行中,但可能它们被严重延迟了?也许是某种异步问题

我在角度上是个新手,也许我不懂什么。我的应用程序中的所有其他绑定都正常工作

你觉得怎么样?欢迎任何帮助!
谢谢

这听起来像是发生了变化检测问题。根据您的变更检测策略,可能会发生类似的情况。尝试在项目中使用“按多边形过滤”函数,看看这是否是问题所在。如果有效,您可以将其保留或删除,并对未触发的输入使用可观测值。

您是否在BodyComponent中使用
ChangeDetectionStrategy.OnPush
?这解决了我的问题。谢谢你的建议。总的来说,阅读这些解决方案确实很有帮助。
<div class="analysis">
  <app-mapa (event_emitter_for_items_filtered_by_polygon)="items_filtered_by_polygon($event)" [items]="map_data"></app-mapa>
  <app-tabla [oportunidades]="oportunidades_filtradas"></app-tabla>
</div>
  items_filtered_by_polygon($event){
    this.oportunidades_filtradas = []
  }