angular - 当我有更多数据时,选择数据非常慢
问题描述
选择视图很慢,但是当我有更多数据时,选择非常慢。
我使用了这段代码:
HTML
<div class="row">
<div class="input-field col s8">
<div formArrayName="data_id">
<div class="form-group" *ngFor="let itemm of editdataForm.get('data_id').value; let i = index">
<br>
<select formControlName="{{i}}" id="data_id" materialize="material_select" [materializeSelectOptions]="items"
[ngClass]="{invalid: invalidInputs}">
<option value="" disabled selected>Select Data</option>
<option *ngFor="let item of items" [value]="item.data_id">{{item.data_name}}</option>
</select>
<div class="button-left">
<button *ngIf="editdataForm.controls.data_id.value.length > 1" type="button" class="fa" (click)="onRemoveItem(i)">x</button>
</div>
</div>
</div>
</div>
<div class="input-field col s2">
<button type="button" class="btn" (click)="onAddData()">AddData</button>
</div>
</div>
TS
this.editdataForm= new FormGroup({
'data_id': this.fb.array([]),
.........
});
populateFormData() {
this.activatedRoute.params.subscribe(
params => {
this.hps.getdata(params['id']).subscribe(
data=> {
this.data= data;
....
this.data.sensors.forEach(x => {
(this.editdataForm.get('data_id') as FormArray).push(new FormControl(x.data_id))
});
}
);
}
);
}
onAddData() {
(<FormArray>this.editdataForm.controls['data_id']).push(new FormControl('', Validators.required));
}
onRemoveItem(index: number) {
(<FormArray>this.editdataForm.controls['data_id']).removeAt(index);
}
当有很多数据时,此代码运行良好,但速度很慢。拜托,你能问我如何优化这个吗?如何使工作快速?
谢谢!
解决方案
您可以更改从后端获取数据的方式
populateFormData() {
this.activatedRoute.params.pipe(
flatMap(params => this.hps.getdata(params['id']))
).subscribe(
data=> {
this.data= data;
....
this.data.sensors.forEach(x => {
(this.editdataForm.get('data_id')as FormArray).push(new FormControl(x.data_id))
});
}
);
}
您也可以创建一个小方法,轻松返回您的 FormArray
get data_id ():FormArray {
return this.editdataForm.get('data_id')
}
然后你的 populateFormData 代码会改变一点
从 (this.editdataForm.get('data_id')as FormArray).push(new FormControl(x.data_id))
将会this.data_id.push(new FormControl(x.data_id))
也可以使用之前在html模板中创建的方法
更新
您可以做的主要改进是更改处理订阅以获取数据的方式。我分享的代码是你怎么做的,一个例子,另一种方法只是让你的代码更简单,你可以使用你自己的代码来设置表单数组中的数据
推荐阅读
- javascript - React Helmet 动态类相互覆盖
- javascript - 如何在 AngularJS 中使用 $HTTP 再次检索数据
- javascript - 使用计算属性向 Vue.js 表添加过滤器
- python - boost python字符串集与C++签名错误不匹配
- node.js - Discord JS:UnhandledPromiseRejectionWarning:错误:Shard 的客户端准备就绪时间过长
- php - 在 json php 循环中查找变量
- python - 即使我定义了 layout_window 也没有定义
- gcc - GMP 是否适用于 gfortran?Silverfrost Fortran 是否有任意精度的算术选项?
- c++ - 矩阵逆变器返回错误的逆
- javascript - 使用下划线 (_) 为未使用的参数添加前缀的原因是什么?