Angular2 devre dışı bırak düğmesi


113

Angular2'de[disable] özniteliğe sahip bir düğmeyi devre dışı bırakabileceğimi biliyorum, örneğin:

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

ama kullanarak bunu yapabilirsiniz [ngClass]veya [ngStyle]? Şöyle:

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

Teşekkürler.


Yanıtlar:


173

Güncelleme

Merak ediyorum. [disabled]Angular 2 tarafından sağlanan öznitelik bağlamayı neden kullanmak istemiyorsunuz ? Bu durumla başa çıkmanın doğru yolu budur. isValidÇekinizi bileşen yöntemi ile taşımanızı öneririm .

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

Denediklerinizle ilgili sorun aşağıda açıklanmıştır

Temelde ngClassburada kullanabilirsiniz . Ancak sınıf eklemek, olayın ateşlenmesini kısıtlamaz. Geçerli girişte olayı başlatmak için, clickolay kodunu aşağıdaki şekilde değiştirmelisiniz . Yani bu onConfirmsadece alan geçerli olduğunda ateşlenecek.

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

Demo Burada


Pekala, bu ngClass'ı düğmeye zaten ekledim, böylece bana engelli olması gerektiği gibi görünüyor, neden [devre dışı] yol tercih ediliyor?
Nir Schwartz

@NirSchwartz çünkü aynı anda her iki şeyi de yapacak .. seçici css kuralları button[disabled]seçici tabanlı olacak ve devre dışı bırakılan olay, clickolayı düğme üzerinde tetikleyecek şekilde kısıtlayacak .. ngClasssınıfta kendi başınıza halletmeniz gerekiyor yukarıdaki cevap ..
Pankaj Parkar

İnsanların [devre dışı] yerine [attr.disabled] kullanmak istemelerinin nedeni, açısal FormControl'ün [devre dışı] dinamik olarak ayarlanamamasıdır. İşte sorun github.com/angular/angular/issues/11271
davyzhang

1
Bir şablon bağlamada bir yöntemi çağırmamalısınız. [disabled]="!isValid"
Tom

3
Ahhaa .. eğer yöntemin sadece değişken bir referansı varsa, o da sorun değil .. Bir fonksiyonun içinde karmaşık mantığınız varsa, o zaman tercih edilmez. Haklısın, bu durumda doğrudan isValidUI üzerinden bayrak çağırabilirim
Pankaj Parkar

39

Aşağıdakileri tavsiye ederim.

<button [disabled]="isInvalid()">Submit</button>

4
Her tik / döngü olarak adlandırılacağı için html'de işlev çağrılarından kaçınmak daha iyi değil mi?
John



5

kullanma ngClass engelliler için geçersiz form için düğmeye onun sağlayan dahili etkinleştirmek ve form herhangi bir ekstra çaba / mantığı yapmadan sırasıyla geçerli ve geçersiz ise düğmesini devre dışı özelliklerinizi Angular2 iyi uygulama değildir.

[disabled] form geçerliyse etkinleştirilecek ve form geçersizse otomatik olarak devre dışı bırakılacak gibi her şeyi yapacaktır.

Örneğe bakın:

<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

Aşağıdaki kod yardımcı olabilir:

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

Bu beri iyi bir çözüm değildir <button disabled="">ya <button disabled="false">hala çoğu tarayıcıda engelli bir düğme gibi ele alınır
BillyTom

2

Tıklama olayı ile birlikte devre dışı bırakmayı denedim. Aşağıda pasaj var, kabul edilen cevap da mükemmel bir şekilde çalıştı, bu cevabı devre dışı bırakma ve tıklama özellikleriyle nasıl kullanılabileceğine bir örnek vermek için ekliyorum.

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

2

Reaktif formlar kullanıyorsanız ve bir form kontrolüyle ilişkili bazı girişleri devre dışı bırakmak istiyorsanız, bu disabledmantığı kodunuza yerleştirmelisiniz ve arama yourFormControl.disable()veyayourFormControl.enable()


2

Bence bu en kolay yol

<!-- 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>

.ts kodu

setStyles() 
{
    let styles = {

    'action-button-disabled': this.model.IsConnected() == false  
  };
  return styles;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.