#angular #angular7 #angular-reactive-forms #formarray
#угловые #angular7 #angular-reactive-forms #formarray
Вопрос:
У меня есть массив форм, генерирующий элементы управления формами для каждой строки с помощью кнопки.
Мне нужно отключить соответствующую кнопку, если связанная группа форм в массиве форм недопустима.
Кнопка является:
<button mat-raised-button color="warn" type="submit" color="warn" (click)="addDist(element, i)">
<mat-icon>add</mat-icon> Add
</button>
С формой массива:
this.arrayGroup = new FormGroup({
distribution: new FormArray(this.dataSource.data.map(x => new FormGroup({
actual_date: new FormControl('', Validators.required),
note: new FormControl(''),
kit: new FormControl('', Validators.required)
})
))
});
Поэтому в каждой строке мне нужно отключить ее, пока не будут заполнены date
и kit
. Другая кнопка должна оставаться недействительной, если их формы не заполнены.
Я пытался:
<button mat-raised-button color="warn" [disabled]="!arrayGroup.get('distribution')).at(i).valid" type="submit" color="warn" (click)="addDist(element, i)">
<mat-icon>add</mat-icon> Add
</button>
Но получил ошибку:
Неперехваченный (в обещании): Ошибка: ошибки синтаксического анализа шаблона: Ошибка синтаксического анализа: неожиданный токен ‘)’ в столбце 32 в [!arrayGroup.get(‘distribution’)).at(i).допустимый]
Затем я попытался:
[disabled]="!arrayGroup.distribution.at(i).valid"
И я получил:
ОШИБКА TypeError: не удается прочитать свойство ‘at’ неопределенного объекта at.eval [как обновленные указания]
Комментарии:
1. Первая ошибка — это синтаксическая ошибка. Допустимый синтаксис будет:
[disabled]="!arrayGroup.get('distribution').at(i).valid"
2. @JSONDerulo это сработало. Вы можете опубликовать это в качестве ответа, пожалуйста.
Ответ №1:
Это синтаксическая ошибка. В вашем коде слишком много одной скобки.
Вот обновленный код:
[disabled]="!arrayGroup.get('distribution').at(i).valid"
Комментарии:
1. как я могу сбросить определенный элемент массива? Я использовал
(<FormArray>this.arrayGroup.get('distribution')).at(i).reset;
, но не сработало