javascript - 正确绑定值以防止重复
问题描述
我有 5 个字段供用户填写:离开代码、起始日期、输入时间 1、截止日期、输入时间 2。我将这些变量声明为我的 .ts 文件中的日期对象,如该片段所示。
interface Supervisor {
name: string;
code: string;
}
interface LeaveCode {
name: string;
code: string;
}
ngOnInit() {
this.dates = [ ];
}
supervisor2: Supervisor[];
selectedSupervisor2: Supervisor;
leaveCodes2: LeaveCode[];
selectedLeaveCode2: LeaveCode;
dates: {leaveCode:string, fromDate: string, fromTime: string, toDate:string, toTime:string}[];
minDate: Date;
maxDate: Date;
fromDate: Date;
toDate: Date;
fromDateMin: Date;
toDateMin: Date;
fromDateMax: Date;
toDateMax: Date;
fromTime: Date;
toTime: Date;
if (this.dates.length < 8)
this.dates.push({leaveCode:"", fromDate: "", fromTime: "", toDate:"", toTime:""});
}
在我的 .html 文件中,我已将这些字段声明如下。我的问题是,当我按下添加按钮以生成新的输入行时,输入上的值与该列中的其余值保持相同。我应该如何正确绑定这些值!
<p-dropdown [options]="leaveCodes2" [(ngModel)]="selectedleaveCodes2" name="selectedleaveCodes2" placeholder="Leave Code*" optionLabel="name" required></p-dropdown>
<p-calendar [showIcon]="true" [(ngModel)]="fromDate" name="fromDate" [minDate]="minDate" [readonlyInput]="true" placeholder="From Date*" id="setter" required></p-calendar>
<input type="text" [(ngModel)]="fromTime" name="fromTime" placeholder="Input Time*" style="height: 2.186em" size="7" maxlength="8" pInputText required>
<p-calendar [showIcon]="true" [(ngModel)]="toDate" name="toDate" [minDate]="minDate" [maxDate]="maxDate" [readonlyInput]="true" placeholder="To Date*" id="setter" required></p-calendar>
<input type="text" [(ngModel)]="toTime" name="toTime" placeholder="Input Time*" style="height: 2.186em" size="7" maxlength="8" pInputText required>
<button pButton type="button" id="addButton" icon="pi pi-plus" class="ui-button-success" (click)="onAddClicked()"></button>
任何帮助将不胜感激,或者任何建议的阅读材料也会很有用。谢谢
解决方案
请使用反应形式方法来获得更复杂的形式
首先为要制作表单的假设字段创建 FormGroup。这里我猜字段是
public dateForm: FormGroup = new FormGroup({
selectedleaveCodes2: new FormControl(''),
fromDate: new FormControl(''),
fromTime: new FormControl(''),
toDate: new FormControl(''),
toTime: new FormControl(''),
});
现在将其添加到您的主 formGroup 假设主 formGroup 是
public mainForm: FormGroup = new FormGroup({
dateFields: new FormArray([]);
});
现在假设您想在 formArray 中添加另一个项目,让我们创建一个辅助方法来完成从mainForm添加dateForm的工作
private getDateForm(): FormGroup {
return new FormGroup({
selectedleaveCodes2: new FormControl(''),
fromDate: new FormControl(''),
fromTime: new FormControl(''),
toDate: new FormControl(''),
toTime: new FormControl(''),
});
}
现在在 FormArray 中添加新项目
this.mainForm.get('dateFields').push(this.getDateForm());
在索引处删除
this.mainForm.get('dateFields').removeAt(index);
现在在 html 中你必须这样做
<div *ngFor="let group in mainForm.get('dateFields')['controls'];let i = index">
<div [formGroup]='group'>
<p-calendar formControlName="selectedleaveCodes2"></p-calendar>
<p-calendar formControlName="fromDate"></p-calendar>
<p-calendar formControlName="fromTime"></p-calendar>
<p-calendar formControlName="toDate"></p-calendar>
<p-calendar formControlName="toTime"></p-calendar>
</div>
</div>
现在在提交调用中->
const value = this.mainForm.value;
看起来像
{
dateFields: [{
selectedleaveCodes2: "your data",
fromDate: "your data",
fromTime: "your data",
toDate: "your data",
toTime: "your data",
},
{
selectedleaveCodes2: "your second data",
fromDate: "your second data",
fromTime: "your second data",
toDate: "your second data",
toTime: "your second data",
}]
}
欲了解更多信息
https://alligator.io/angular/reactive-forms-formarray-dynamic-fields/
推荐阅读
- python - 如何使用 python 创建一个有效的 json 文件?
- python - 如何从pyqt5上的导入函数内部发送信号?
- javascript - 试图在屏幕上显示按钮点击结果
- react-native - 启用倒置选项的 React Native FlatList
- selenium - Selenium Chrome 驱动程序 - 尝试无头选项时出现异常
- c# - 什么是方法重载的替代方法,以减少代码重复c#
- javascript - TypeError:无法读取未定义的属性“消息”-Twitter API
- go - 如何模拟 HTTP 调用的第二次尝试?
- java - 具有超过 2 个参数的 java 泛型
- javascript - 加载变量初始化