2015-12-20 10 views
31

Sto provando una cosa semplice con Angular 2.0 Voglio associare un modello a una "casella di spunta", registrare la "modifica" con un metodo, avere il metodo eseguito quando lo stato della casella di controllo è cambiato e agisce in base allo stato del modello. Tutto funziona ma, quando viene eseguito il metodo collegato all'evento change, lo stato del modello è il contrario di ciò che mi aspetto, ovvero è falso quando la casella di controllo è selezionata, è true quando la casella di controllo non è selezionata. Ecco lo snippet di codice;angular2 checkbox ng-model non aggiornato

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

Qualche idea su cosa sto facendo male?

+1

dimentica il codice :) –

+0

Prima domanda su StackOverflow. Impossibile incollare uno snippet HTML. – Picci

+0

puoi comunque incollare un codice raw –

risposta

4

si può anche provare e controllare l'oggetto dell'evento e basta tirare fuori il controllato parametro

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


onChange(event) { 
    var isChecked = event.currentTarget.checked; 
} 
  • sembra che l'evento è di essere licenziato b Prima che la modella abbia la possibilità di aggiornarsi. Attualmente funziona bene per i miei elementi selezionati.
+1

Ho notato che l'evento viene generato prima dell'aggiornamento del modello. – elkelk

+0

solo per riferimento https://scotch.io/tutorials/how-to-deal-with-different-form-controls-in-angular-2 –

4

provare questo

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

partire angular2.beta8 questo semplice trucco faranno

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

+0

Questo è quello che dovremmo fare ora imo – meffect

+2

Da utilizzare con * Angular4 * Ho dovuto aggiungere la proprietà "name" al campo di input. – SuperShalabi

14

Per me funziona solo quando ho usato (ngModelChange):

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

Se uso (change) o (click) lo stato è sempre contrario di quello che mi aspetto, come hai detto

+1

Testato da Angular2 RC.4. Funziona perfettamente. –

+0

Sembra che l'evento change si attivi sulle modifiche nel DOM e che ngModelChange venga generato quando la proprietà dell'oggetto cambia. Quindi, quando si legge la proprietà dell'oggetto sull'evento change, non è stato ancora aggiornato al valore del DOM. –

21

Un modo per farlo senza ngModel

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

DisplayValue sarebbe metodo getter/setter setDisplayValue() aggiornerà il record e quindi DisplayValue verrebbe aggiornato

6

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

+2

Alcune spiegazioni potrebbero aiutare gli altri a comprendere meglio la soluzione. – Acapulco

+0

Grazie per l'aiuto. Forse posso spiegare. [NgModel] ha un vincolo oneway con valore di confronto, giusto per far apparire la casella di spunta come selezionata o deselezionata. In (NgModelChange) imposti il ​​valore sul modello. – otaviodecampos

1

Non dimenticare di includere un nome o la casella di controllo non aggiornerà e riceverai un errore sulla console.

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

Provare così.

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

basta scrivere controllato nel tag di tipo di ingresso:

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

angolare 2.xx stabile: facile modo per conoscere una casella è selezionata o meno:

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

ts:

export class component{ 
    constructor() {} 

    check(checked){ 

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

Sarebbe più robusto da usare (change) = "check ($ event)", quindi il metodo check() ha accesso alla proprietà checked, così come tutte le altre proprietà - in più non è necessario implementare il #spy . – Spikeh

0

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

0

ingresso

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

evento di modifica

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