Nút tắt Angular2


113

Tôi biết rằng trong angle2, tôi có thể tắt một nút có [disable]thuộc tính, ví dụ:

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

nhưng tôi có thể làm điều đó bằng cách sử dụng [ngClass]hoặc [ngStyle]? Như vậy:

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

Cảm ơn.


1
đây là plnkr đang làm việc cho cùng plnkr.co/edit/MW3vT4XscWcKrDdAwBoE?p=preview
Pardeep Jain

Câu trả lời:


173

Cập nhật

Tôi tự hỏi. Tại sao bạn không muốn sử dụng [disabled]ràng buộc thuộc tính do Angular 2 cung cấp? Đó là cách chính xác để giải quyết tình huống này. Tôi đề nghị bạn chuyển isValidséc của mình qua phương pháp thành phần.

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

Sự cố với những gì bạn đã thử được giải thích bên dưới

Về cơ bản bạn có thể sử dụng ngClassở đây. Nhưng việc thêm lớp sẽ không hạn chế sự kiện kích hoạt. Để kích hoạt sự kiện trên đầu vào hợp lệ, bạn nên thay đổi clickmã sự kiện thành bên dưới. Vì vậy, điều đó onConfirmsẽ chỉ được kích hoạt khi trường hợp lệ.

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

Demo tại đây


Vâng, tôi thêm rằng ngClass đã có sẵn trong nút nên đối với tôi, nó có vẻ bị vô hiệu hóa cần được điều chỉnh, tại sao cách [đã tắt] lại được ưu tiên?
Nir Schwartz

@NirSchwartz vì nó sẽ thực hiện cả hai việc cùng một lúc .. quy tắc css của bộ chọn sẽ được áp dụng trên button[disabled]sự kiện dựa trên bộ chọn & bị vô hiệu hóa sẽ hạn chế clicksự kiện kích hoạt trên nút .. trong ngClasslớp học, bạn cần phải tự xử lý nó, như tôi đã trình bày trong câu trả lời ở trên ..
Pankaj Parkar

Lý do tại sao mọi người muốn sử dụng [attr.disabled] chứ không phải [disable] là vì không thể thiết lập động [vô hiệu hóa] của FormControl. Đây là sự cố github.com/angular/angular/issues/11271
davyzhang

1
Bạn không nên gọi một phương thức trong liên kết mẫu. [disabled]="!isValid"
Tom,

3
Ahhaa .. nếu phương thức chỉ có một tham chiếu biến thì nó tốt thôi .. Nếu bạn có logic phức tạp bên trong một hàm, thì nó không được ưu tiên. Bạn nói đúng, trong trường hợp này, tôi có thể gọi isValidcờ trực tiếp trên giao diện người dùng
Pankaj Parkar,

39

Tôi muốn giới thiệu những điều sau đây.

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

4
Không phải là tốt hơn để tránh các cuộc gọi hàm trong html, vì nó sẽ được gọi mỗi lần đánh dấu / chu kỳ?
John



5

Sử dụng ngClassđể tắt nút đối với biểu mẫu không hợp lệ không phải là thực tiễn tốt trong Angular2 khi nó cung cấp các tính năng có sẵn để bật và tắt nút nếu biểu mẫu hợp lệ và không hợp lệ tương ứng mà không cần thực hiện thêm bất kỳ nỗ lực / logic nào.

[disabled] sẽ làm tất cả những điều như nếu biểu mẫu hợp lệ thì nó sẽ được kích hoạt và nếu biểu mẫu không hợp lệ thì nó sẽ tự động bị vô hiệu hóa.

Xem Ví dụ:

<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

Có thể mã dưới đây có thể giúp:

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

Đây không phải là một giải pháp tốt vì <button disabled="">hay <button disabled="false">vẫn xử lý như một nút khuyết tật ở hầu hết các trình duyệt
BillyTom

2

Tôi đã thử sử dụng vô hiệu hóa cùng với sự kiện nhấp chuột. Dưới đây là đoạn mã, câu trả lời được chấp nhận cũng hoạt động hoàn toàn tốt, tôi đang thêm câu trả lời này để đưa ra ví dụ về cách nó có thể được sử dụng với thuộc tính vô hiệu hóa và nhấp chuột.

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

2

Nếu bạn đang sử dụng biểu mẫu phản ứng và muốn tắt một số đầu vào được liên kết với điều khiển biểu mẫu, bạn nên đặt disabledlogic này vào mã của bạn và gọi yourFormControl.disable()hoặcyourFormControl.enable()


2

Tôi nghĩ đây là cách dễ nhất

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

mã .ts

setStyles() 
{
    let styles = {

    'action-button-disabled': this.model.IsConnected() == false  
  };
  return styles;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.