Saya sudah mencoba mengikuti contoh jawaban lain dari sini dan saya tidak berhasil!
Saya membuat formulir reaktif (yaitu, dinamis) dan saya ingin menonaktifkan beberapa bidang pada waktu tertentu. Kode formulir saya:
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 saya:
<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>
Saya mengurangi kode untuk memfasilitasi. Saya ingin menonaktifkan bidang tipe pilih. Saya mencoba melakukan hal berikut:
form = new FormGroup({
first: new FormControl({value: '', disabled: true}, Validators.required),
});
tidak bekerja! Apakah ada yang punya saran?
first
? `:)value
bukan formArray, ini adalah formControlName. Jika Anda inginvalue
menjadi formArray, Anda harus mengubahnya. Saat ini adalah formControlName. Jadi jika Anda ingin seluruh bidang pilih dinonaktifkan, cukup ubah<select formArrayName="value">
ke<select formControlName="value">
Jawaban:
atau
sumber
if
pernyataan. Setelah formulir dikirim, seluruh formulir dinonaktifkan sekali lagi.Perhatian
Jika Anda membuat formulir menggunakan variabel untuk kondisi dan mencoba mengubahnya nanti, formulir tidak akan berfungsi, yaitu formulir tidak akan berubah .
Sebagai contoh
dan jika Anda mengubah variabel
bentuknya tidak akan berubah. Kamu harus menggunakan
BTW.
Anda harus menggunakan metode patchValue untuk mengubah nilai:
sumber
Merupakan praktik yang buruk untuk menggunakan disable di DOM dengan bentuk reaktif. Anda dapat menyetel opsi ini di
FormControl
, saat Anda memulai dariProperti
value
tidak perluAtau Anda bisa mendapatkan kontrol formulir Anda dengan
get('control_name')
dan mengaturdisable
sumber
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
. Jadi cara yang disarankan untuk mengubah status nonaktifkan / aktifkan secara langsung melalui kontrol. Juga, Anda dapat memeriksa topik hebat ini netbasal.com/…Saya menyelesaikannya dengan membungkus objek input saya dengan labelnya dalam satu set bidang: Fieldset harus memiliki properti yang dinonaktifkan terikat ke boolean
sumber
The
disabling
FormControlprevents
itu untuk hadir dalam bentuk sementarasaving
. Anda bisa mengaturnya sebagaireadonly
properti.Dan Anda bisa mencapainya dengan cara ini:
HTML:
TS:
Temukan ini di sini
sumber
form.getRawValue()
untuk menyertakan nilai kontrol yang dinonaktifkanJika akan menggunakan
disabled
elemen input formulir (seperti yang disarankan dalam jawaban yang benar bagaimana menonaktifkan input ) validasi untuk mereka juga akan dinonaktifkan, perhatikan itu!(Dan jika Anda menggunakan tombol kirim seperti
[disabled]="!form.valid"
itu akan mengecualikan bidang Anda dari validasi)sumber
Pendekatan yang lebih umum adalah.
sumber
Jika Anda ingin menonaktifkan
first
(formcontrol) maka Anda dapat menggunakan pernyataan di bawah ini.this.form.first.disable();
sumber
Ini berhasil untuk saya:
this.form.get('first').disable({onlySelf: true});
sumber
Atau formcontrol 'first'
Anda dapat mengatur menonaktifkan atau mengaktifkan pada set awal.
sumber
sumber
Solusi terbaik ada di sini:
https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110
Garis besar solusi (dalam kasus tautan rusak):
(1) Buat direktif
(2) Gunakan seperti itu
(3) Karena input yang dinonaktifkan tidak muncul di form.value on submit Anda mungkin perlu menggunakan yang berikut ini (jika diperlukan):
sumber
this.form.get('FIELD_NAME').patchValue(DYNAMIC_VALUE)
saya menunjukkan formControl. ketika diteruskan ke direktif, itu menunjukkan Tidak dapat membaca properti 'nonaktifkan' dari undefinedSaya memiliki masalah yang sama, tetapi memanggil this.form.controls ['name']. Disable () tidak memperbaikinya karena saya sedang memuat ulang view saya (menggunakan router.navigate ()).
Dalam kasus saya, saya harus mengatur ulang formulir saya sebelum memuat ulang:
this.form = undefined; this.router.navigate ([path]);
sumber
sumber
Anda dapat mendeklarasikan fungsi untuk mengaktifkan / menonaktifkan semua kontrol formulir:
dan gunakan seperti ini
sumber
Untuk membuat lapangan menonaktifkan dan memungkinkan dari reaktif bentuk sudut 2+
1. Untuk menonaktifkan
<input class="form-control" name="Firstname" formControlName="firstname" [attr.disabled]="true">
Untuk mengaktifkan
Aktifkan seluruh formulir
this.formname.enable();
Aktifkan bidang tertentu saja
this.formname.controls.firstname.enable();
Ini Bekerja dengan baik. Komentar untuk pertanyaan.
sumber