Angular2無効化ボタン


113

angular2[disable]では、次のような属性を持つボタンを無効にできることを知っています 。

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

しかし、[ngClass]またはを使用してそれを行うことができ[ngStyle]ますか?そのようです:

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

ありがとう。


回答:


173

更新

不思議なんだけど。[disabled]Angular 2が提供する属性バインディングを使用したくないのですか?これは、この状況に対処する正しい方法です。isValidチェックをコンポーネントメソッドで移動することをお勧めします。

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

あなたが試したものの問題は以下で説明されています

基本的にngClassここで使用できます。ただし、クラスを追加しても、イベントの発生は制限されません。有効な入力でイベントを発生させるには、clickイベントコードを以下に変更する必要があります。そのonConfirmため、フィールドが有効な場合にのみ発生します。

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

デモはこちら


まあ、私はそのngClassをボタンにすでに追加しているので、無効になっているように見える必要があるので、なぜ[無効]な方法が好まれますか?
Nir Schwartz

@NirSchwartzそれは一度に両方のことを行うので..セレクターのCSSルールはbutton[disabled]セレクターに基づいて適用され、無効化されたclickイベントはイベントをボタンで起動するように制限します.. ngClassクラスで、私は上記の回答..
Pankaj Parkar 2016

[disabled]ではなく[attr.disabled]を使用する理由は、Angle FormControlの[disabled]を動的に設定できないためです。これがgithub.com/angular/angular/issues/11271
davyzhang

1
テンプレートバインディングでメソッドを呼び出すことはできません。[disabled]="!isValid"
トム

3
Ahhaa ..メソッドに変数参照しかない場合は、問題ありません。関数内に複雑なロジックがある場合、それは推奨されません。正解です。この場合isValid、UIでフラグを直接呼び出すことができます
Pankaj Parkar

39

以下をお勧めします。

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

4
ティック/サイクルごとに呼び出されるので、htmlでの関数呼び出しは避けた方がよいでしょうか?
John



5

使用してngClass無効に無効なフォームのボタンと、その提供する作り付けのが有効とフォームが余分な努力/ロジックを実行することなく、それぞれ有効と無効の場合は、ボタンを無効にする機能Angular2では良い方法ではありません。

[disabled] フォームが有効な場合は有効になり、フォームが無効な場合は自動的に無効になるなど、すべての処理を行います。

例を参照してください:

<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

以下のコードが役立ちます:

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

これは、以来、良い解決策ではない<button disabled="">か、<button disabled="false">まだほとんどのブラウザで無効になっボタンのように扱われる
BillyTom

2

クリックイベントと一緒に無効にしてみました。以下はスニペットです。承認された回答も問題なく機能しました。無効にしたプロパティとクリックプロパティで使用する例を示すために、この回答を追加します。

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

2

リアクティブフォームを使用していて、フォームコントロールに関連付けられている一部の入力を無効にする場合は、このdisabledロジックをコードに配置して、yourFormControl.disable()またはyourFormControl.enable()


2

これが一番簡単な方法だと思います

<!-- 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コード

setStyles() 
{
    let styles = {

    'action-button-disabled': this.model.IsConnected() == false  
  };
  return styles;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.