2015-12-07 25 views
19

Tôi có nhiều hộp kiểm và một nút mà đã được kích hoạt chỉ khi ít nhất một hộp kiểm được chọnAngular2, nút disable nếu không có hộp kiểm chọn

<input type="checkbox">VALUE1 
<input type="checkbox">VALUE2 
<input type="checkbox">VALUE3 
<input type="checkbox">VALUE4 
<button>Proceed</button> 

Làm thế nào là đạt được bằng Angular2.

P.S: tìm thấy các câu hỏi tương tự nhưng không sử dụng Angular2.

+1

thử điều này: * ng-if = "" –

Trả lời

37

Một cách là sử dụng ngModel trên mỗi hộp kiểm, rồi kiểm soát tài sản disabled của nút thông qua một phương pháp mà kiểm tra từng mô hình hộp kiểm bang:

@Component({ 
    template: ` 
    <label *ngFor="let cb of checkboxes"> 
     <input type="checkbox" [(ngModel)]="cb.state">{{cb.label}} 
    </label> 
    <p><button [disabled]="buttonState()">button</button> 
    ` 
}) 
class App { 
    checkboxes = [{label: 'one'},{label: 'two'}]; 
    constructor() {} 
    buttonState() { 
    return !this.checkboxes.some(_ => _.state); 
    } 
} 

Plunker

+0

Đánh giá cao câu trả lời đã cho. Bất kỳ ý tưởng nào tại sao chức năng buttonState được kích hoạt nhiều lần? và cách tránh kích hoạt nhiều lần? –

+0

Nội suy biểu thức được thực hiện mỗi khi Góc nhìn thấy vừa vặn (một cái gì đó đã xảy ra trong thành phần và Angular bắt đầu thuật toán phát hiện thay đổi của nó để cập nhật 2 biến liên kết) –

+0

Làm thế nào bạn thực hiện điều này nếu tất cả các checkboes được chọn? – Harry

6

Sử dụng propertie [disable] như:

<input type="checkbox" [(ng-model)]="disableButton1"> VALUE1 
<input type="checkbox" [(ng-model)]="disableButton2"> VALUE1 
<input type="checkbox" [(ng-model)]="disableButton3"> VALUE1 
<input type="checkbox" [(ng-model)]="disableButton4"> VALUE1 
<button type="button" [disabled]="disableButton || disableButton2">Submit</button> 
+0

Cảm ơn bạn, nhưng mặc dù nó hoạt động, với nhiều hộp kiểm, nó kết thúc bằng việc chọn một nếu một người được chọn – Khaled

+1

Cập nhật ví dụ của tôi. Bây giờ hãy xem –

+1

Điều này hoạt động hoàn hảo trong trường hợp mã tĩnh, nhưng khi hộp kiểm được tạo động, hãy sử dụng '* ng-for' có lẽ chỉ có tùy chọn là sử dụng biến Boolean được gán dựa trên số lượng hộp kiểm đã chọn. – Khaled

0

Bạn c thực hiện bất kỳ hành động nào bằng cách sử dụng sự kiện $ trong sự kiện thay đổi của hộp kiểm.

mẫu:

HTML

<input type="checkbox" (change)="changeEvent($event)" /> 
<button [disabled]="toogleBool">button</button> 

TS

toggleBool: boolean=true; 

changeEvent(event) { 
     if (event.target.checked) { 
      this.toggleBool= false; 
     } 
     else { 
      this.toggleBool= true; 
     } 
    } 
Các vấn đề liên quan