2015-12-20 3 views
31

Ich versuche eine einfache Sache mit Angular 2.0 Ich möchte ein Modell an eine 'Eingabe-Checkbox' binden, die 'Änderung' mit einer Methode registrieren, lassen Sie die Methode ausgeführt werden, wenn der Checkbox-Zustand wird geändert und agiert basierend auf dem Status des Modells. Alles funktioniert, aber wenn die mit dem Änderungsereignis verknüpfte Methode ausgeführt wird, ist der Status des Modells das Gegenteil dessen, was ich erwarte, d. H. Ist falsch, wenn das Kontrollkästchen aktiviert ist, wenn das Kontrollkästchen nicht ausgewählt ist. Hier ist das Code-Snippet;angular2 checkbox ng-model nicht aktualisiert

<input value={{object.name}} type="checkbox" [(ng-model)]="object.selected" (change)="onChange(object.selected)"> 

Irgendeine Idee über das, was ich falsch mache?

+1

den Code vergessen :) –

+0

Erste Frage auf Stackoverflow. Es konnte kein HTML-Snippet eingefügt werden. – Picci

+0

Sie können sowieso etwas Rohcode einfügen –

Antwort

4

Sie können auch das Ereignisobjekt versuchen und inspizieren und einfach herausziehen geprüft Parameter

<input value={{object.name}} type="checkbox" [(ng-model)]="object.selected" (change)="onChange($event)"> 


onChange(event) { 
    var isChecked = event.currentTarget.checked; 
} 
  • scheint, wie das Ereignis b abgefeuert wird Bevor das Modell aktualisiert werden kann. Es funktioniert derzeit gut für meine ausgewählten Elemente.
+1

Ich bemerkte, dass das Ereignis vor der Modellaktualisierung auch ausgelöst wird. – elkelk

+0

nur zur Referenz https://scotch.io/tutorials/how-to-deal-with-different-form-controls-in-angular-2 –

4

dies ausprobieren

app.html

<span *ngFor="#ca of classArray; #i=index">           
    <input type="checkbox" id="{{ca.id}}" #cv [checked]=false          
    (change)="onChange(ca.id,cv.checked)"> 
     {{ca.class_name}},{{cv.checked}} <br> 
</span> 

app.ts

onChange(classId,flag){ 
     console.log(classId+" : "+flag); 
    } 
41

Ab angular2.beta8 dieser einfache Trick

tun

<input type="checkbox" [(ngModel)]="object.selected" />

+0

Das sollten wir jetzt machen imo – meffect

+2

Zur Verwendung mit * Angular4 * Ich musste dem Eingabefeld die Eigenschaft "name" hinzufügen. – SuperShalabi

14

Für mich funktioniert nur, wenn ich (ngModelChange) verwendet:

<input type="checkbox" [(ngModel)]="object.selected" (ngModelChange)="onChange(object.selected)"> 

Wenn ich (change) oder (click) der Staat verwenden ist immer Gegenteil von dem, was ich erwarten, wie Sie

sagte
+1

Getestet ab Angular2 RC.4. Funktioniert perfekt. –

+0

Scheint so, als würde das Änderungsereignis bei Änderungen im DOM ausgelöst, und der ngModelChange wird ausgelöst, wenn sich die Objekteigenschaft ändert. Beim Lesen der Objekteigenschaft für das Änderungsereignis wurde es daher noch nicht auf den Wert des DOM aktualisiert. –

21

Ein Weg zu tun es ohne ngModell

<input 
    id="{{fieldId}}" 
    type="checkbox" 
    [checked]="displayValue" 
    (click)="setDisplayValue($event.target.checked)" 
> 

anzeige wäre Getter/Setter setDisplayValue() -Methode den Datensatz aktualisieren und somit würde anzeige

6

<input type="checkbox" [ngModel]="object.selected == 'Y'" (ngModelChange)="object.selected=$event?'Y':'N'">

+2

Einige Erklärungen könnten anderen helfen, die Lösung besser zu verstehen. – Acapulco

+0

Danke für Hilfe. Vielleicht kann ich es erklären. [NgModel] hat eine Oneway-Bindung mit Vergleichswert, nur um das Kontrollkästchen als aktiviert oder deaktiviert zu markieren. In (NgModelChange) legen Sie Wert für das Modell fest. – otaviodecampos

1

vergessen aktualisiert werden Sie nicht den Namen oder das Kontrollkästchen, um nicht aktualisieren und Sie erhalten einen Fehler auf der Konsole.

<label>Sign on<input type="checkbox" name='showLogin2' [(ngModel)]="model.ShowLogin" ></label> 
3

Versuchen Sie so.

<input type="checkbox" [checked]="object.completed" (change)="object.completed = !objected.completed" > 
0

nur in Tag des Eingabetypen geprüft schreiben:

<input type="checkbox" name="abc" checked /> 
2

Angular 2.xx stabil: einfache Möglichkeit, eine Checkbox, zu wissen, aktiviert ist oder nicht:

<input type="checkbox" #checkbox (change)="check(checkbox.checked)"> 

ts:

export class component{ 
    constructor() {} 

    check(checked){ 

    if(checked){ 
     // checked 
    }else{ 
     // not checked 
    } 
    } 
+0

Wäre robuster zu verwenden (ändern) = "check ($ event)", dann hat die check() - Methode Zugriff auf die checked -Eigenschaft sowie alle anderen Eigenschaften - und Sie müssen die #spy nicht implementieren . – Spikeh

0

<input type="checkbox" [(ngModel)]="object.selected" /> 
 
<div>{{object | json}}</div>

0

Eingang

<input type="checkbox" (change)="selectionChange($event.srcElement)"> 

Änderungsereignis

selectionChange(input: HTMLInputElement) { 
    input.checked === true 
     ? doSomethingIfTrue() 
     : doSomethingIfFalse(); 
}