Я делаю угловое приложение с угловой динамической формой, где мне нужно разделить форму на две части.
В которой у меня есть поле ввода firstname and lastname
на первой странице и при нажатии следующей кнопки детикоторый имеет email and dropdown
должен быть загружен ..
HTML:
<form (ngSubmit)="onSubmit()" [formGroup]="form">
<div *ngFor="let question of questions" class="form-row">
<ng-container *ngIf="question.children">
<div [formArrayName]="question.key">
<div *ngFor="let item of form.get(question.key).controls; let i=index" [formGroupName]="i">
<div *ngFor="let item of question.children">
<app-question [question]="item" [form]="form.get(question.key).at(i)"></app-question>
</div>
</div>
</div>
</ng-container>
<ng-container *ngIf="!question.children">
<app-question [question]="question" [form]="form"></app-question>
</ng-container>
</div>
<button (click)="goBack()"> Previous </button>
<button (click)="addControls('myArray')"> Next </button>
<div class="form-row">
<button type="submit" [disabled]="!form.valid">Save</button>
</div>
</form>
Ts:
@Input() questions: QuestionBase<any>[] = [];
form: FormGroup;
payLoad = '';
page: number = 0
constructor(private qcs: QuestionControlService) { }
ngOnInit() {
this.form = this.qcs.toFormGroup(this.questions);
}
onSubmit() {
this.payLoad = JSON.stringify(this.form.value);
}
addControls(control: string) {
let question: any = this.questions.find(q => q.key == control);
let children = question ? question.children : null;
if (children)
(this.form.get(control) as FormArray).push(this.qcs.toFormGroup(children))
}
removeControls(control: string){
let array=this.form.get(control) as FormArray;
array.removeAt(array.length-1);
}
goBack() {
//Function to move to previous step
}
Рабочая демонстрация :
https://stackblitz.com/edit/angular-x4a5b6-p4agaq
В этой демонстрации с кодом, который вы можете видеть при каждом нажатии кнопки добавления, дочерние элементы (массив) добавляются к приведенному ниже элементу вта же страница ..
У меня также есть функция removeControl
, которая имеет,
removeControls(control: string){
let array=this.form.get(control) as FormArray;
array.removeAt(array.length-1);
}
Чтобы было ясно, я не собираюсь использовать это сейчас и не собираюсь нигде ничего удалять.Единственное, что нужно - щелкнуть рядом с дочерними элементами с помощью функции addControl
, чтобы добавить дочерних элементов на следующую следующую страницу и вернуться на предыдущий шаг.
Для добавления на ту же страницу, что и в демо-версии, необходимоперейти к следующей странице и снова при нажатии на предыдущий он должен переходить в исходное состояние при каждом следующемщелкнув по нему, вы получите новый email and dropdown
, а на предыдущем - возврат к предыдущему шагу.
Он должен двигаться как слайдер с эффектом скольжения при движении вперед и назад ..
Все должнобыть на чисто угловом и на основе javascript / typcript, и нет jquery .. Как вы могли видеть в моей демонстрации, я не включал ни библиотеку, ни jquery ..
Пожалуйста, помогите мнечтобы добиться результата .. Застрял надолго ..