Angular2禁用按钮

Nir*_*rtz 106 html angular2-forms angular2-template angular

我知道在angular2中我可以禁用具有该[disable]属性的按钮 ,例如:

<button [disabled]="!isValid" (click)="onConfirm()">Confirm</button>
Run Code Online (Sandbox Code Playgroud)

但我可以做到这一点使用[ngClass][ngStyle]?像这样:

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

谢谢.

Pan*_*kar 162

更新

我在想.为什么不想使用[disabled]Angular 2提供的属性绑定?这是处理这种情况的正确方法.我建议你isValid通过组件方法移动你的支票.

<button [disabled]="! isValid" (click)="onConfirm()">Confirm</button>
Run Code Online (Sandbox Code Playgroud)

您尝试过的问题如下所述

基本上你可以ngClass在这里使用.但是添加类不会限制事件被触发.要在有效输入上启动事件,您应该将click事件代码更改为以下.因此onConfirm只有当字段有效时才会被触发.

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

在这里演示

  • Ahhaa ..如果方法仅具有变量引用,则很好。如果您在函数中具有复杂的逻辑,则不建议使用。您是正确的,在这种情况下,我可以直接在用户界面上调用`isValid`标志 (3认同)

Pro*_*imo 40

我会推荐以下内容.

<button [disabled]="isInvalid()">Submit</button>
Run Code Online (Sandbox Code Playgroud)

  • 避免在 html 中调用函数不是更好,因为它会在每个滴答/循环中被调用? (4认同)

Sas*_*.R. 8

是的你可以

<div class="button" [ngClass]="{active: isOn, disabled: isDisabled}"
         (click)="toggle(!isOn)">
         Click me!
 </div>
Run Code Online (Sandbox Code Playgroud)

https://angular.io/docs/ts/latest/api/common/NgClass-directive.html


Rap*_*tor 6

如果您有表格,那么以下内容也是可能的:

<form #f="ngForm">
    <input name="myfield" type="text" minlenght="3" required ngModel>
    <button type="submit" [disabled]="!f.valid">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

在这里演示:http://plnkr.co/edit/Xm2dCwqB9p6WygrquUGh?p=preview&open=app%2Fapp.component.ts


小智 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="">
Run Code Online (Sandbox Code Playgroud)