【发布时间】:2020-10-15 17:26:46
【问题描述】:
有问题。我有一个组件,其中包含一些创建和删除输入字段的逻辑
.ts
export class AppComponent implements OnInit {
resource: Resource[] = [];
fieldId = 0;
testArr = ['1', '2', '3', '4'];
ngOnInit() {
this.resource = this.getResource();
}
addRes(resource: Resource) {
resource.resourceInputFields = ['', ...resource.resourceInputFields];
console.log(this.resource);
}
removeRes(resource: Resource, index: number) {
resource.resourceInputFields.splice(index, 1);
}
getResource(): Resource[] {
return [
{
resourceLink: 'link',
resourceInputFields: [],
resourceId: '',
},
];
}
}
export interface Resource {
resourceLink: string;
resourceId: string;
resourceInputFields: string[];
}
.html
<div *ngFor="let res of resource">
<a>{{ res.resourceLink }}</a>
<button class="btn" (click)="addRes(res)">+</button>
<div class="fields">
<div *ngFor="let resourceField of res.resourceInputFields; index as i">
{{ i }}
<input type="text" [ngModel]="resourceField" />
<button class="btn" (click)="removeRes(res, i)">-</button>
</div>
</div>
</div>
问题是:我的拼接,像 shift 一样工作,它删除了 arr 中的最后一个元素。
我需要删除一个字段,正是我的加号按钮所在的位置。如果有任何值,在我要删除的输入字段中,我也需要删除一个值; stackbiz
【问题讨论】:
-
拼接操作按预期工作。但是,由于您在 html 模板中呈现数组的索引,因此感觉数组正在移动。如果将 addRes 方法中的行替换为:
resource.resourceInputFields = [${Math.random()}, ...resource.resourceInputFields];你会看到正确的元素被删除了。 -
你能在我的 stackbiz 中显示我吗,我没有得到
-
是的,你说得对,它工作正常并删除正确的字段。所以我认为,我应该重构我的 addRes 方法。
标签: javascript arrays angular typescript object