Tombol nonaktifkan Angular2

113

Saya tahu bahwa di angular2 saya dapat menonaktifkan tombol dengan [disable]atribut, misalnya:

<button [disabled]="!isValid" (click)="onConfirm()">Confirm</button>

tetapi dapatkah saya melakukannya dengan menggunakan [ngClass]atau [ngStyle]? Seperti:

<button [ngStyle]="{disabled : !isValid}" (click)="onConfirm()">Confirm</button>

Terima kasih.

Nir Schwartz
sumber
1
di sini bekerja plnkr untuk plnkr.co/edit/MW3vT4XscWcKrDdAwBoE yang sama? p=preview
Pardeep Jain

Jawaban:

173

Memperbarui

Aku bertanya-tanya. Mengapa Anda tidak ingin menggunakan [disabled]pengikatan atribut yang disediakan oleh Angular 2? Ini cara yang benar untuk menghadapi situasi ini. Saya usulkan Anda memindahkan isValidcek melalui metode komponen.

<button [disabled]="! isValid" (click)="onConfirm()">Confirm</button>

Masalah dengan apa yang Anda coba dijelaskan di bawah ini

Pada dasarnya Anda bisa menggunakan di ngClasssini. Tetapi menambahkan kelas tidak akan membatasi pengaktifan acara. Untuk mengaktifkan acara pada input yang valid, Anda harus mengubah clickkode acara di bawah ini. Sehingga onConfirmakan dipecat hanya jika field valid.

<button [ngClass]="{disabled : !isValid}" (click)="isValid && onConfirm()">Confirm</button>

Demo Disini

Pankaj Parkar
sumber
Saya menambahkan bahwa ngClass sudah ada di tombol sehingga menurut saya yang dinonaktifkan perlu ada, mengapa cara [yang dinonaktifkan] lebih disukai?
Nir Schwartz
@NirSchwartz karena itu akan melakukan kedua hal sekaligus .. aturan css selektor akan diterapkan pada button[disabled]acara berbasis selektor & dinonaktifkan akan membatasi clickacara untuk dijalankan pada tombol .. di ngClasskelas hal yang perlu Anda tangani sendiri, seperti yang saya tunjukkan di jawaban di atas ..
Pankaj Parkar
Alasan mengapa orang ingin menggunakan [attr.disabled] daripada [disabled] adalah karena [disabled] angular FormControl tidak dapat disetel secara dinamis. Inilah masalahnya github.com/angular/angular/issues/11271
davyzhang
1
Anda tidak boleh memanggil metode dalam pengikatan template. [disabled]="!isValid"
Tom
3
Ahhaa .. jika metode hanya memiliki referensi variabel, maka tidak masalah .. Jika Anda memiliki logika kompleks di dalam suatu fungsi, maka itu tidak disukai. Anda benar, dalam hal ini saya bisa langsung memanggil isValidbendera di UI
Pankaj Parkar
39

Saya akan merekomendasikan yang berikut ini.

<button [disabled]="isInvalid()">Submit</button>
Pd bulan depan
sumber
4
Bukankah lebih baik menghindari pemanggilan fungsi di html, karena akan dipanggil setiap centang / siklus?
Yohanes
5

Menggunakan ngClassuntuk menonaktifkan tombol untuk formulir tidak valid bukanlah praktik yang baik di Angular2 ketika menyediakan fitur bawaan untuk mengaktifkan dan menonaktifkan tombol jika formulir masing-masing valid dan tidak valid tanpa melakukan upaya ekstra / logika.

[disabled] akan melakukan semua hal seperti jika formulir valid maka itu akan diaktifkan dan jika formulir tidak valid maka itu akan dinonaktifkan secara otomatis.

Lihat Contoh:

<form (ngSubmit)="f.form.valid" #f="ngForm" novalidate>
<input type="text" placeholder="Name" [(ngModel)]="txtName" name="txtname" #textname="ngModel" required>
<input type="button" class="mdl-button" [disabled]="!f.form.valid" (click)="onSave()" name="">

Kendur
sumber
3

Mungkin kode di bawah ini dapat membantu:

<button [attr.disabled]="!isValid ? true : null">Submit</button>
Shivang Gupta
sumber
Ini bukan solusi yang baik karena <button disabled="">atau <button disabled="false">masih ditangani seperti tombol yang dinonaktifkan di sebagian besar browser
BillyTom
2

Saya mencoba menggunakan dinonaktifkan bersama dengan acara klik. Di bawah ini adalah cuplikannya, jawaban yang diterima juga berfungsi dengan baik, saya menambahkan jawaban ini untuk memberikan contoh bagaimana ia dapat digunakan dengan properti yang dinonaktifkan dan klik.

<button (click)="!planNextDisabled && planNext()" [disabled]="planNextDisabled"></button>
pritesh agrawal
sumber
2

Jika Anda menggunakan formulir reaktif dan ingin menonaktifkan beberapa masukan yang terkait dengan kontrol formulir, Anda harus menempatkan disabledlogika ini ke dalam kode dan panggilan Anda yourFormControl.disable()atauyourFormControl.enable()

Sergey P. alias biru langit
sumber
2

Saya pikir ini adalah cara termudah

<!-- Submit Button-->
<button 
  mat-raised-button       
  color="primary"
  [disabled]="!f.valid"
>
  Submit
</button>
Gouk
sumber
1
 <button [disabled]="this.model.IsConnected() == false"
              [ngClass]="setStyles()"
              class="action-button action-button-selected button-send"
              (click)= "this.Send()">
          SEND
        </button>

kode .ts

setStyles() 
{
    let styles = {

    'action-button-disabled': this.model.IsConnected() == false  
  };
  return styles;
}
Amir Touitou
sumber