在Angular中,*ngFor
是一个结构指令,用于基于数组中的项动态创建DOM元素。如果你想从使用 *ngFor
动态创建的文本框中获取数据,你可以使用Angular的双向数据绑定和表单控件来实现。
FormControl
,用于跟踪表单字段的值。假设我们有一个数组 items
,我们想为每个项创建一个文本框,并获取它们的值。
<!-- app.component.html -->
<form #form="ngForm">
<div *ngFor="let item of items; let i = index">
<input type="text" name="item{{i}}" [(ngModel)]="item.value" required>
</div>
<button type="button" (click)="submit(form)">Submit</button>
</form>
// app.component.ts
import { Component } from '@angular/core';
import { NgForm } from '@angular/forms';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
items = [{ value: '' }, { value: '' }];
submit(form: NgForm) {
console.log(form.value);
}
}
<!-- app.component.html -->
<form [formGroup]="form">
<div *ngFor="let item of items; let i = index">
<input type="text" [formControlName]="'item' + i" required>
</div>
<button type="button" (click)="submit()">Submit</button>
</form>
// app.component.ts
import { Component } from '@angular/core';
import { FormBuilder, FormGroup } from '@angular/forms';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
form: FormGroup;
items = [null, null];
constructor(private fb: FormBuilder) {
this.form = this.fb.group({
item0: [''],
item1: ['']
});
}
submit() {
console.log(this.form.value);
}
}
原因:可能是由于双向数据绑定没有正确设置。
解决方法:
[(ngModel)]
或 [formControlName]
。原因:可能是由于表单控件没有正确初始化或绑定。
解决方法:
FormBuilder
可以简化表单控件的创建和管理。通过上述方法,你可以有效地从使用 *ngFor
动态创建的文本框中获取数据,并处理可能遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云