【发布时间】:2020-06-07 09:14:06
【问题描述】:
我在 mat-table 内使用 mat-slide-toggle。每行都有一个包含 mat-slide-toggle 的列和另一个包含一个按钮的列。我想将 mat-slide-toggle 的值作为参数传递给按钮的单击函数。
<ng-container matColumnDef="show waiting list">
<mat-header-cell *matHeaderCellDef> Show Waiting List</mat-header-cell>
<mat-cell *matCellDef="let element">
<mat-slide-toggle></mat-slide-toggle>
</mat-cell>
</ng-container>
<ng-container matColumnDef="play">
<mat-header-cell *matHeaderCellDef> Play</mat-header-cell>
<mat-cell *matCellDef="let element">
<button (click)="play(element, toggleValueGoesHere)" mat-icon-button>
<mat-icon class="mat-18">play_arrow</mat-icon>
</button>
</mat-cell>
</ng-container>
如何使用 formControl 来实现?如果没有,还有其他方法吗?
【问题讨论】:
-
我已经有一段时间没有使用 Angular 了,但是在 React 中,您可以将切换按钮的状态提升到最近的公共父组件。该父组件将传递一个函数以将状态更改为切换按钮,并将实际状态值传递给按钮。切换会改变父组件的状态,同时更新两个子组件。
-
这两个元素的共同父元素是 mat-table,它也包含所有行。从那里更新状态会改变所有行的状态。
-
mat-table 是树中最接近的“组件”,但我的意思是最接近的 Angular 组件,它实际上可以保持自定义状态。如果我没记错的话,角度组件是由 .html 文件和 .ts 文件拆分而成的?在 .ts 脚本中创建一个状态变量,并将其传递给切换和按钮。切换可以改变状态,按钮将从中读取(双向绑定),Angular 应该优化以只更新这两个特定组件,否则,渲染应该可以忽略不计。
标签: angular angular-material angular8 mat-table