Jus*_*ode 2 delete-row angular
我的samplepage.component.html
<table mat-table [dataSource]="myDataArray" >
<!-- <ng-container [matColumnDef]="column" *ngFor="let column of displayedColumns" >
<th mat-header-cell *matHeaderCellDef > {{column}} </th>
<td mat-cell *matCellDef="let element" > {{element[column]}} </td>
</ng-container> -->
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> Id. </th>
<td mat-cell *matCellDef="let element; let i = index;"> {{i+1}} </td>
</ng-container>
<ng-container matColumnDef="ticketnumb">
<th mat-header-cell *matHeaderCellDef> Ticket Number </th>
<td mat-cell *matCellDef="let element"> {{element.ticketnumb}} </td>
</ng-container>
<ng-container matColumnDef="actionsColumn">
<th mat-header-cell *matHeaderCellDef> Action </th>
<td mat-cell *matCellDef="let element; let j = index;">
<button mat-raised-button color="warn" focusable="false" (click)="deleteTicket(j)">
<i class="fa fa-times mat-icon"></i> Remove
</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我的samplepage.component.ts
import { Component, OnInit, ViewChild } from '@angular/core';
@Component({
selector: 'app-batchticketvalidation',
templateUrl: './batchticketvalidation.component.html',
styleUrls: ['./batchticketvalidation.component.css']
})
export class BatchticketvalidationComponent implements OnInit {
constructor() { }
ngOnInit() {
}
displayedColumns = ['id', 'ticketnumb', 'actionsColumn'];
dataSource: PeriodicElement[] = ELEMENT_DATA;
private myDataArray: any;
private tempTicketCount: number = 0;
deleteTicket(rowid: number){
if (rowid > -1) {
this.myDataArray.splice(rowid, 1);
}
}
}
export interface PeriodicElement {
id: number;
ticketnumb: string;
actionsColumn: any;
}
const ELEMENT_DATA: PeriodicElement[] = [
];
Run Code Online (Sandbox Code Playgroud)
我是新手。我需要从表中删除垂直行的帮助,一旦删除了行,表应刷新或显示现有数据。我只有静态行。这只是我想显示给客户端的普通样机html。
每行都有删除按钮,单击删除按钮后,我将调用deleteTicket(rowid)。
触发deleteTicket方法时,不会从Ui中删除该行,但是当我控制台this.myDataArray时,将从对象中删除该数据。
我尝试了所有可能。
小智 7
在splice()按项目索引之后,您应该更新数据源。
const index = this.dataSource.data.indexOf(item.id);
this.dataSource.data.splice(index, 1);
this.dataSource._updateChangeSubscription(); // <-- Refresh the datasource
Run Code Online (Sandbox Code Playgroud)
问题在于游戏中的不变性:初始化后的 mat-table 只监听数据源引用
<table mat-table [dataSource]="myDataArray">
Run Code Online (Sandbox Code Playgroud)
因此,数据源引用在更改其内容后应该以某种方式更新,例如
deleteTicket(rowid: number) {
if (rowid > -1) {
this.myDataArray.splice(rowid, 1);
this.myDataArray = [...this.myDataArray]; // new ref!
}
}
Run Code Online (Sandbox Code Playgroud)
或者更简单
deleteTicket(rowid: number) {
this.myDataArray = this.myDataArray.filter((item, index) => index !== rowid);
}
Run Code Online (Sandbox Code Playgroud)
Max*_*Max -1
我建议使用MatTableDataSource.
dataSource: MatTableDataSource = new MatTableDataSource<T>(ELEMENT_DATA);
deleteFunction(item){
// find item and remove ist
dataSource.data.splice(this.dataSource.data.indexOf(item.id), 1);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5352 次 |
| 最近记录: |