大佬教程收集整理的这篇文章主要介绍了angular6 – 如何在角度模板驱动的表单模型中使用fieldset表示数组?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是模特,
export class Surveyviewmodel { Survey: Survey; QuestionAnswerSets: QuestionAnswerSet[]; } export class Survey { Id: String; Name: String; } export class QuestionAnswerSet { Question: Question; Answers: Answer[]; }
下面是视图,
<form [formGroup]="surveyForm" (ngSubmit)="onFormSubmit(surveyForm)"> <div formGroupName="Survey"> <input type="hidden" name="Id" formControlName="Id"> <label>{{model.Survey.NamE}}</label> </div> <div class='qa-set' formArrayName="QuestionAnswerSets"> <fieldset *ngFor="let questionAnswerSet of surveyForm.controls.QuestionAnswerSets.controls; index as setId;" [formGroupName]="setId"> <div formGroupName="Question"> <input type="hidden" name="Id" formControlName="Id"> <label>{{setId+1}}. </label> <label>{{model.QuestionAnswerSets[setId].Question.value}}</label> </div> <div class="row" formArrayName="Answers"> <div *ngFor="let answer of this.surveyForm.controls.QuestionAnswerSets.controls[setId].controls.Answers.controls; index as answerId;" [formGroupName]="answerId"> <div class="col-12 col-sm-3" formGroupName="Answer"> <input type="hidden" name="Id" formControlName="Id"> <label> <input type="radio" name="Value" formControlName="Value" /> {{model.QuestionAnswerSets[setId].Answers[answerId].value}} </label> </div> </div> </div> </fieldset> </div> <div class="row form-group"> <div class="col-12"> <button type="button" class="btn btn-priMary float-right" type="submit">submit</button> </div> </div> </form>
零件
import { Component,OnInit } from "@angular/core"; import { Validators,FormBuilder,FormGroup,FormControl,FormArray } from "@angular/forms"; @Component({ ... }) export class SurveyComponent implements OnInit { public surveyForm: FormGroup; constructor(protected formBuilder: FormBuilder) {} ngOnInit() { this.surveyForm = this.formBuilder.group({ Survey: new FormGroup({ Id: new FormControl("",Validators.required),Name: new FormControl("",Validators.required) }),QuestionAnswerSets: new FormArray([]) }); } initSet() { return this.formBuilder.group({ Question: new FormControl("",Answers: new FormArray([]) }); } addSet() { const questionAnswerSets = <FormArray>( this.surveyForm.controls.QuestionAnswerSets ); questionAnswerSets.push(this.initSet()); } removeSet(setId: number) { let questionAnswerSets = <FormArray>( this.surveyForm.controls.QuestionAnswerSets ); questionAnswerSets.removeAt(setId); } initAnswer() { return this.formBuilder.group({ Answer: new FormControl("",Validators.required) }); } addAnswer(setId: number) { const questionAnswerSets = <FormArray>( this.surveyForm.controls.QuestionAnswerSets ); const answer = <FormArray>( questionAnswerSets.controls[setId]["controls"].Answers ); answer.push(this.initAnswer()); } removeAnswer(setId: number,answerId: number) { const questionAnswerSets = <FormArray>( this.surveyForm.controls.QuestionAnswerSets ); const answer = <FormArray>( questionAnswerSets.controls[setId]["controls"].Answers ); answer.removeAt(answerId); } }
teamplate
<form [formGroup]="surveyForm" (ngSubmit)="saveForm(surveyForm.value)"> <div formArrayName="QuestionAnswerSets"> <fieldset *ngFor="let questionAnswerSet of surveyForm.controls.QuestionAnswerSets.controls; index as setId;" [formGroupName]="setId"> <input type="text" formControlName="Question" /> <div formArrayName="Answers"> <div class="ui-g-12" *ngFor="let answer of this.surveyForm.controls.QuestionAnswerSets.controls[setId].controls.Answers.controls; index as answerId;" [formGroupName]="answerId"> <input type="text" formControlName="Answer" /> <button type="button" (click)="removeAnswer(setId,answerId)">Remove Answer</button> </div> </div> <button type="button" (click)="addAnswer(setId)">Add Answer</button> </fieldset> </div> <button type="button" (click)="addSet()">Add Set</button> </form>
可能我错过了什么,但它会给你一个想法
以上是大佬教程为你收集整理的angular6 – 如何在角度模板驱动的表单模型中使用fieldset表示数组?全部内容,希望文章能够帮你解决angular6 – 如何在角度模板驱动的表单模型中使用fieldset表示数组?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。