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.


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


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>

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="">


3

Mungkin kode di bawah ini dapat membantu:

<button [attr.disabled]="!isValid ? true : null">Submit</button>

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>

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()


2

Saya pikir ini adalah cara termudah

<!-- Submit Button-->
<button 
  mat-raised-button       
  color="primary"
  [disabled]="!f.valid"
>
  Submit
</button>

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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.