У меня есть группа форм, содержащая несколько полей.У меня также есть флажок.Когда флажок установлен, я бы хотел, чтобы одно из полей ввода получало значения из другого поля ввода.Если флажок не установлен, я бы хотел сделать поле независимым.
Я попытался использовать логическое значение флажка-формы управления для присвоения значений одного из полей ввода другому (сторона квадрата = стороны прямоугольника, если прямоугольник является квадратом), но Angular выдает сообщение об ошибке «слишком много рекурсии».
в component.ts
ngOnInit() {
this.formMain = this.fb.group({
sideSquare: this.addSq.side,
lenRect: this.addRect.len,
widRect: this.addRect.wid,
isSquare: true,
});
this.onChanges();
}
onChanges(): void {
this.formMain.valueChanges.subscribe(val => this.updateValues());
}
updateValues(): void {
this.formMain.get('lenRect').setvalue(
this.formMain.get('isSquare').value ?
this.formMain.get('sideSquare').value : 0 );
this.formMain.get('widRect').setvalue(
this.formMain.get('isSquare').value ?
this.formMain.get('sideSquare').value : 0 );
}
incomponent.html
<form [formGroup]="formMain">
<mat-card>
<mat-card-header>
<mat-card-title>Square vs Rectangle</mat-card-title>
</mat-card-header>
<mat-card-content>
<mat-form-field>
<input matInput placeholder="Square side" type="number" formControlName="sideSquare">
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Rectangle length" type="number" formControlName="lenRect">
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Rectangle length" type="number" formControlName="widRect">
</mat-form-field>
<mat-checkbox formControlName="isSquare">Rectangle is a square</mat-checkbox>
</mat-card-content>
</mat-card>
</form>
Эта проблема аналогична формам, в которых адрес доставки совпадает с адресом выставления счета (но проще).Я нашел другой вопрос по проблеме адресации, но предложенный ответ не работал для меня.
Есть ли способ сделать это хорошо?Спасибо за вашу помощь!