我有一个表,其中一列是文本输入。
当用户编辑文本时,保存和取消按钮均被启用。
保存按钮应该只发送新的值到服务器。我可以做到这一点没有问题。
但是取消按钮我不知道怎么把输入改回来,因为模型和子元素都有,我怎么知道我写的是表的哪个元素?
模板部件:
<table mat-table [dataSource]="gsServersDataSource" class="mat-elevation-z8">
<tr mat-header-row *matHeaderRowDef="gsServersHeaders"></tr>
<tr mat-row *matRowDef="let row; columns: gsServersHeaders;"></tr>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef > Name </th>
<td mat-cell *matCellDef="let element" > {{element.name}} </td>
</ng-container>
<ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef mat-sort-header sortActionDescription="Sort by value"> Value </th>
<td mat-cell *matCellDef="let element">
<input id="valueInput" type="text" value="{{element.value}}" (keyup)="onChangeValue()">
</td>
</ng-container>
<ng-container matColumnDef="modify">
<th mat-header-cell *matHeaderCellDef> Modify </th>
<td mat-cell *matCellDef="let element">
<button id="saveChanges" mat-mini-fab color="primary" (click)="onClickSave()" [disabled]="disabled">
<mat-icon>✓</mat-icon>
</button>
<button id="cancelChanges" mat-mini-fab color="primary" (click)="onClickCancel(element)" [disabled]="disabled">
<mat-icon>X</mat-icon>
</button>
</td>
</ng-container>
</table>
组成部分:
gsServersDataSource = [{name: 'name1', value: 'value1'}];
gsServersHeaders: string[] = ['name', 'value', 'modify'];
disabled=true;
onChangeValue(){
this.disabled=false;
}
onClickSave(element: InstanceDataPoint){
//service call with new value
this.disabled=true;
}
onClickCancel(element: InstanceDataPoint){
//Put original back : How to??
this.disabled=true;
}
}
1条答案
按热度按时间roejwanj1#
我为包含用户输入的临时值的每一行创建了另一个值。
当用户想要保存它时,它将被发布,并在成功时保存为原始值。
当用户想要取消更改时。临时值将重置为原始值。
在模板上,我现在使用newValue作为文本输入的值。
我把输入的值传递给keyup钩子
在组件上,我现在将文本输入更改后的输入值保存到newValue中。
点击保存后,如果发布成功,我会将newValue分配给originalValue。
单击“取消”时,我会将newValue放回原始值。