Просто создайте класс CSS:
.disabled {
pointer-events:none;
background-color: #D3D3D3;
}
Добавьте метод к вашему Компоненту:
getValueByIndex(index) {
const actionValue = ( < FormArray > this.form.get('credentials')).at(index).value.action;
return actionValue !== 'set' && actionValue !== 'go';
}
Используйте этот метод в своем шаблоне:
<input
[class.disabled]="getValueByIndex(i)"
placeholder="Label"
formControlName="label">
Вот Рабочий образец StackBlitz для вашего реф.
ОБНОВЛЕНИЕ:
В качестве альтернативы выможет сделать следующее:
Сделать поле label
отключенным по умолчанию:
addCreds() {
const creds = this.form.controls.credentials as FormArray;
creds.push(this.fb.group({
action: '',
name: '',
label: {
value: '',
disabled: true
},
state: 'na'
}));
}
И затем прослушать событие (ngModelChange)
в форме, чтобы обновить состояние поля метки:
<select
formControlName="action"
(ngModelChange)="($event === 'set' || $event === 'go') ? creds.controls.label.enable() : creds.controls.label.disable()">
<option
*ngFor="let option of data"
[value]="option.key">
{{option.value}}
</option>
</select>
Вот Рабочий образец StackBlitz для этого подхода.
Спасибо А. Виннену за егокомментирует последствия использования предыдущего подхода для производительности.