2015-12-07 12 views
19

ausgewählt Ich habe mehrere Kontrollkästchen und eine Schaltfläche, die nur werden muss aktiviert, wenn mindestens ein Kontrollkästchen aktiviert istAngular2, deaktivieren Taste, wenn kein Kontrollkästchen

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

Wie ist das mit Angular2 erreicht.

P.S: ähnliche Fragen gefunden, aber nicht mit Angular2.

+1

dies versuchen: * ng-if = "" –

Antwort

37

Eine Möglichkeit ist ngModel auf jeder Checkbox zu verwenden, dann ist die disabled Eigenschaft der Schaltfläche steuern über eine Methode, die jedes Kontrollkästchen Modellzustand untersucht:

@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

Schätzen Sie die gegebene Antwort. Irgendeine Idee, warum die ButtonState Funktion mehrmals ausgelöst wird? und wie man mehrere Auslösungen vermeiden kann? –

+0

Die Ausdruckinterpolation wird jedes Mal durchgeführt, wenn Angular Seas passt (etwas ist in der Komponente passiert und Angular hat seinen Änderungsdetektionsalgorithmus gestartet, um 2-Wege-gebundene Variablen zu aktualisieren) –

+0

Wie würden Sie das nur tun, wenn ALLE Checkboxen ausgewählt sind? – Harry

6

die propertie Verwenden [disable] als:

<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

Danke, aber obwohl, dass es funktioniert, mit mehreren Ankreuzfeldern, endet die Auswahl eines ll Wenn eins ausgewählt ist – Khaled

+1

Mein Beispiel aktualisieren. Schauen Sie jetzt –

+1

Dies funktioniert perfekt im Falle eines statischen Codes, aber wenn Checkboxen dynamisch erstellt werden, wird zum Beispiel mit der Option '* ng-for' vielleicht nur eine boolesche Variable verwendet, die basierend auf der Anzahl der ausgewählten Checkboxen zugewiesen wird. – Khaled

0

Sie c Führen Sie eine Aktion aus, indem Sie das Ereignis $ event in change für das Kontrollkästchen verwenden.

Probe:

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; 
     } 
    } 
Verwandte Themen