Я уже пробовал следовать примеру других ответов отсюда, и мне это не удалось!
Я создал реактивную форму (т. Е. Динамическую) и хочу в любой момент отключить некоторые поля. Мой код формы:
this.form = this._fb.group({
name: ['', Validators.required],
options: this._fb.array([])
});
const control = <FormArray>this.form.controls['options'];
control.push(this._fb.group({
value: ['']
}));
мой html:
<div class='row' formArrayName="options">
<div *ngFor="let opt of form.controls.options.controls; let i=index">
<div [formGroupName]="i">
<select formArrayName="value">
<option></option>
<option>{{ opt.controls.value }}</option>
</select>
</div>
</div>
</div>
Я сократил код для облегчения. Я хочу отключить поле выбора типа. Я пытался сделать следующее:
form = new FormGroup({
first: new FormControl({value: '', disabled: true}, Validators.required),
});
не работает! Есть ли у кого-нибудь предложения?
first
? `:)value
это не formArray, это formControlName. Если вы хотитеvalue
быть formArray, вам придется его изменить. В настоящее время это formControlName. Поэтому, если вы хотите, чтобы все поле выбора было отключено, просто измените его<select formArrayName="value">
на<select formControlName="value">
Ответы:
или
источник
if
операторов. После отправки формы вся форма снова отключается.Обращать внимание
Если вы создаете форму с использованием переменной для условия и пытаетесь изменить ее позже, это не сработает, т.е. форма не изменится .
Например
и если вы измените переменную
форма не изменится. Вы должны использовать
Кстати.
Вы должны использовать метод patchValue для изменения значения:
источник
Использование disable в DOM с реактивными формами - плохая практика. Вы можете установить эту опцию в своем
FormControl
, когда вы запускаете изСобственность
value
не нужнаИли вы можете получить контроль над формой с помощью
get('control_name')
и установитьdisable
источник
It looks like you’re using the disabled attribute with a reactive form directive. If you set disabled to true when you set up this control in your component class, the disabled attribute will actually be set in the DOM for you. We recommend using this approach to avoid ‘changed after checked’ errors
. Итак, рекомендуемый способ изменить состояние отключения / включения напрямую через элементы управления. Также вы можете проверить эту замечательную тему netbasal.com/…Я решил это, заключив свой входной объект с его меткой в набор полей: у набора полей должно быть свойство disabled, привязанное к логическому
источник
disabling
FormControlprevents
она может присутствовать в форме , в то времяsaving
. Вы можете просто установить этоreadonly
свойство.А добиться этого можно так:
HTML:
TS:
Нашел это здесь
источник
form.getRawValue()
для включения отключенных значений элементов управленияЕсли использовать
disabled
элементы ввода формы (например, предложенные в правильном ответе, как отключить ввод ), проверка для них также будет отключена, обратите на это внимание!(И если вы используете кнопку отправки, как будто
[disabled]="!form.valid"
это исключит ваше поле из проверки)источник
Был бы более общий подход.
источник
Если вы хотите отключить
first
(formcontrol), вы можете использовать инструкцию ниже.this.form.first.disable();
источник
Это сработало для меня:
this.form.get('first').disable({onlySelf: true});
источник
Или formcontrol 'сначала'
Вы можете отключить или включить при первоначальной настройке.
источник
источник
Лучшее решение здесь:
https://netbasal.com/disables-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110
Схема решения (в случае неработающей ссылки):
(1) Создайте директиву
(2) Используйте это так
(3) Поскольку отключенные входы не отображаются в form.value при отправке, вам может потребоваться использовать следующее (при необходимости):
источник
this.form.get('FIELD_NAME').patchValue(DYNAMIC_VALUE)
я показываю formControl. когда он передается в директиву, он показывает Cannot read property 'disable' of undefinedУ меня была та же проблема, но вызов this.form.controls ['name']. Disable () не устранил ее, потому что я перезагружал свое представление (используя router.navigate ()).
В моем случае мне пришлось сбросить форму перед перезагрузкой:
this.form = undefined; this.router.navigate ([путь]);
источник
источник
Вы можете объявить функцию для включения / отключения всех элементов управления формой:
и используйте это так
источник
Для того, чтобы сделать поле Отключить и включить в реактивной форме углового 2+
1. Чтобы отключить
<input class="form-control" name="Firstname" formControlName="firstname" [attr.disabled]="true">
Включить
Включить всю форму
this.formname.enable();
Включить только конкретное поле
this.formname.controls.firstname.enable();
Это прекрасно работает. Комментарии к запросам.
источник