在同级组件之间传递数据
Passing Data between sibling components
我正在尝试在两个同级组件之间传递数据,组件结构如下所示。我需要在两个兄弟组件之间传递数据,
我不想让组件成为父子组件,而是我需要在同级组件之间传递数据
但是当点击按钮时出现错误:
TypeError: Cannot read property 'settDate' of undefined
不确定这里是否遗漏了什么
因为你的组件在同一个父组件下,我假设 PRJ Shipping Component
是一个 SMART 组件,其余的是 DUMB 组件(它们只与输入和输出交互)
因此您需要向 reportingFilterComponent
添加一个输出并发出过滤器值,然后 PRJ Shipping Component
具有事件处理程序来获取该值,并将其作为输入传递给 tjl shipment component
某物如下所示
reportingFilterComponent.ts
@Output() filterChange : EventEmitter<ShipDateFilterModel[]> = new EventEmitter<ShipDateFilterModel[]>()
filterButtonClick() {
this.filterChange.emit(/. your filter value../);
}
PRJ 航运Component.html
<app-reporting (filterChange)="onFilterChange($event)"></app-reporting>
<app-tjl-shipment [filter]="filter"></app-tjl-shipment>
PRJ 航运Component.ts
filter: ShipDateFilterModel[];
onFilterChange(event:ShipDateFilterModel[]) {
this.filter = event;
}
tjl-shipment.component.ts
@Input() filter: ShipDateFilterModel[];
ngOnChanges(changes: SimpleChanges) {
if (changes.filter && changes.filter.currentValue) {
// do whatever is needed
}
}
改进
为了让 DUMB 组件保持 DUMB,他们不应该进行任何 http 调用或其他操作。所以说最好 PRJ Shipping Component
接收过滤值并进行过滤操作,然后将过滤后的数据传递给 tjl-shipment.component
另一个解决方案
您可以创建一个服务来保存组件之间的数据并通知更改,但在您的情况下它是 needless complexity
我正在尝试在两个同级组件之间传递数据,组件结构如下所示。我需要在两个兄弟组件之间传递数据,
我不想让组件成为父子组件,而是我需要在同级组件之间传递数据
但是当点击按钮时出现错误:
TypeError: Cannot read property 'settDate' of undefined
不确定这里是否遗漏了什么
因为你的组件在同一个父组件下,我假设 PRJ Shipping Component
是一个 SMART 组件,其余的是 DUMB 组件(它们只与输入和输出交互)
因此您需要向 reportingFilterComponent
添加一个输出并发出过滤器值,然后 PRJ Shipping Component
具有事件处理程序来获取该值,并将其作为输入传递给 tjl shipment component
某物如下所示
reportingFilterComponent.ts
@Output() filterChange : EventEmitter<ShipDateFilterModel[]> = new EventEmitter<ShipDateFilterModel[]>()
filterButtonClick() {
this.filterChange.emit(/. your filter value../);
}
PRJ 航运Component.html
<app-reporting (filterChange)="onFilterChange($event)"></app-reporting>
<app-tjl-shipment [filter]="filter"></app-tjl-shipment>
PRJ 航运Component.ts
filter: ShipDateFilterModel[];
onFilterChange(event:ShipDateFilterModel[]) {
this.filter = event;
}
tjl-shipment.component.ts
@Input() filter: ShipDateFilterModel[];
ngOnChanges(changes: SimpleChanges) {
if (changes.filter && changes.filter.currentValue) {
// do whatever is needed
}
}
改进
为了让 DUMB 组件保持 DUMB,他们不应该进行任何 http 调用或其他操作。所以说最好 PRJ Shipping Component
接收过滤值并进行过滤操作,然后将过滤后的数据传递给 tjl-shipment.component
另一个解决方案
您可以创建一个服务来保存组件之间的数据并通知更改,但在您的情况下它是 needless complexity