gpt4 book ai didi

Angular Material 垫表未显示来自数据源的更新数据

转载 作者:太空狗 更新时间:2023-10-29 19:36:19 24 4
gpt4 key购买 nike

我的简单任务是将输入框中键入的文本添加到 mat-table,但它没有按预期工作。数据源只刷新了一次,没有显示从第二次开始的更新数据。

这是我的代码 app.component.html

 <div class="main" fxLayout="column" fxGap="10">
<div class="input-area">
<mat-form-field>
<input matInput placeholder="Type something" [(ngModel)]="currentText">
</mat-form-field>
<button mat-raised-button color="primary" style="margin-left:10px;" (click)="onAdd($event)">Add</button>
</div>
<div class="result-area">
<mat-table #table [dataSource]="dataSource" class="mat-elevation-z8">
<ng-container matColumnDef="name">
<mat-header-cell #th *matHeaderCellDef> Name </mat-header-cell>
<mat-cell #td *matCellDef="let element"> {{element.name}} </mat-cell>
</ng-container>
<mat-header-row #tr *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row #tr *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
</div>

这是我的“app.component.ts”,其中包含更新表数据源的“添加”事件。

@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
currentText: string= "";
displayedColumns = ['name'];
data: Data[] = [];
dataSource: Data[];

constructor(){}

onAdd($event){
this.data.push({name: this.currentText});
this.dataSource = this.data;
}
}

interface Data{
name: string;
}

我做错了什么?这是上面 code 的 stackblitz 示例

最佳答案

对数据源的引用保持不变,因此 Material 不知道您的源已更改。

尝试

this.dataSource = [...this.data];

Forked Stackblitz

或者像这样使用BehaviorSubject:

dataSource = new BehaviorSubject([]);

onAdd($event){
this.data.push({name: this.currentText});
console.log(this.data);
this.dataSource.next(this.data);
}

Forked Stackblitz

关于Angular Material 垫表未显示来自数据源的更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50849044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com