Son*_*nam 5 javascript validation typescript angular angular-reactive-forms
我有一个带有答案选项的问题列表,作为单选按钮字段。我从JSON文件中获得了这些问题和答案,因此正在HTML上对其进行迭代并将其值动态分配给formControlName。我的问题是在迭代控制值时如何进行验证?
*ngIf="cricketForm.control.get('ques{{i}}').invalid"
*ngIf="cricketForm.control.get('ques{{i}}').invalid"
Run Code Online (Sandbox Code Playgroud)
这给我一个错误。如何以正确的方式来做?
https://stackblitz.com/edit/angular-yq4lyz-zt9b3h?file=app/form-field-overview-example.html 现在验证无法正常工作
html文件:
<form [formGroup]="cricketForm">
<div *ngFor = "let user of userJson; let i =index ">
<div class="label1" for="NameId">{{user.question}}</div>
<mat-radio-group formControlName="ques{{i+1}}" aria-label="Select an option">
<div *ngFor = "let option of user.options; let j =index">
<mat-radio-button [value]=j>{{option}}</mat-radio-button>
</div>
</mat-radio-group>
<div class="invalid-feedback" *ngIf="cricketForm.control.get('ques{{i}}').invalid" >This field is required</div>
</div>
<button (click)="onSubmit()">Submit</button>
<button (click)="onReset()">Reset</button>
</form>
Run Code Online (Sandbox Code Playgroud)
ts文件:
ngOnInit() {
this.cricketForm = this.formBuilder.group({
ques1: [null, [Validators.required]],
ques2: [null, [Validators.required]],
ques3: [null, [Validators.required]],
ques4: [null, [Validators.required]]
})
this.userDataService.getJSON().subscribe(data => {
console.log(data);
this.userJson = data;
this.options = data.options
});
}
Run Code Online (Sandbox Code Playgroud)
样本JSON数据:
[
{"question": "Who Was The First Indian To Hit A Test Century?", "options":["Lala Amarnath","Kapil Dev", "Sunil Gavaskar"],"ans":"Lala Amarnath"},
{"question":"Who Won The Inaugural Asia Cup Championship?","options":["Pakistan","Sri Lanka", "India"],"ans":"India"},
{"question":"Who Was Australia’s First Captain?","options":["F.S.Jackson"
,"D.W. Gregory", "Tony Lewis"],"ans":"D.W. Gregory"},
{"question":" When And Where Was The First Ranji Trophy Match Played?","options":["kolkata"
,"Mumbai", "Chennai"],"ans":"Chennai"}
]
Run Code Online (Sandbox Code Playgroud)
您有语法错误。必须是
*ngIf="cricketForm.get('ques'+(i+1)).invalid"
Run Code Online (Sandbox Code Playgroud)
查看您的分叉 stackblitz
注意:我认为您必须尝试使用 FormArrays 重新思考您的代码。方法很简单
<form formGroup="formArray">
<div *ngFor = "let control of formArray.controls; let i =index ">
<div class="label1" for="NameId">{{userJson[i].question}}</div>
<mat-radio-group [formControl]="control" aria-label="Select an option">
<div *ngFor = "let option of userJson[i].options; let j =index">
<mat-radio-button [value]=j>{{option}}</mat-radio-button>
</div>
</mat-radio-group>
<div class="invalid-feedback" *ngIf="control.invalid" >This field is required</div>
</div>
<button (click)="onSubmit()">Submit</button>
<button (click)="onReset()">Reset</button>
</form>
Run Code Online (Sandbox Code Playgroud)
看到这一点,我们迭代 formArray.controls 并使用 i=index。要显示标签,请使用 userJson[i]
在哪里:
this.formArray=new FormArray(
this.userJson.map(
()=>new FormControl(null,Validators.required))
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |