2016-05-06 11 views
20

Sono newbie in Angular2 e nel Web a livello globale, voglio avviare un'azione che modifica un valore di parametro di oject nel Database quando si verifica un checkbox o deselezionandolo utilizzando Material-Design, I provato con [(ngModel)] ma non è successo nulla. l'idea è che devo aggiungere alcune proposizioni con lo stato checked | unchecked per dire se si tratta di una proposizione true o false. Ecco il modello proposizioneAvviare un evento quando si seleziona una casella di controllo in Angular2

export class PropositionModel { 
     id:string; 
     wordingP:string; // the proposition 
     propStatus:Boolean; // the proposition status 
} 

qui è il codice HTML per una proposta:

<div class="uk-width-xlarge-1-1 uk-width-medium-1-2"> 
       <div (submit)="addProp1()" class="uk-input-group"> 
        <span class="uk-input-group-addon"><input type="checkbox" data-md-icheck/></span> 
        <label>Proposition 1</label> 
        <input [(ngModel)]="proposition1.wordingP" type="text" class="md-input" required class="md-input"/> 
       </div> 
      </div> 

qui è il codice dattiloscritto per l'aggiunta la proposizione:

addProp1() { 
     this.proposition1 = new PropositionModel(); 
     this.proposition1.propStatus = false; 
     this.propositionService.addProposition(this.proposition1) 
      .subscribe(response=> { 
       console.log(response); 
       console.log(this.proposition1); 
       this.proposition1 = new PropositionModel();}) 
    } 

E come si può vedere l'ho reso un false di default per il proposition status e voglio cambiarlo dopo aver controllato la proposta. Ecco un'immagine come cerca una migliore comprensione del problema. enter image description here

Qualsiasi aiuto Per favore?

risposta

49

PLUNKER DEMO

Template:utilizzo evento di modifica per chiamare la funzione e passare l'evento.

<input type="checkbox" data-md-icheck (change)="addprop1($event)"/> 

TS:ricevano l'evento e controllare se casella è selezionata prima di aggiungere proprietà.

addProp1(e) { 

    if(e.target.checked){ 
     this.proposition1 = new PropositionModel(); 
     this.proposition1.propStatus = false; 
     this.propositionService.addProposition(this.proposition1) 
      .subscribe(response=> { 
       console.log(response); 
       console.log(this.proposition1); 
       this.proposition1 = new PropositionModel();}) 
    } 
} 
+1

Nota che è (cambia) e non (onChange).È stato il mio stupido errore che mi ci è voluto qualche minuto per capire –

+0

La demo del plunker non funziona – TomSlick

+0

grazie per la notifica, risolto :) –

4

È possibile utilizzare ngModel come

<input type="checkbox" [ngModel]="checkboxValue" (ngModelChange)="addProp($event)" data-md-icheck/> 

Per aggiornare lo stato di casella di controllo aggiornando la proprietà checkboxValue nel codice e quando la casella è modificato dall'utente addProp() è chiamato.

+0

non ha funzionato, mi dispiace, puoi chiarire di più secondo il codice sopra? lo apprezzerò .. –

+1

'[ngModel] =" checkboxValue "' aggiunge i direttrici 'ngModel' e predefinito' ControlValueAccessor' (e lega il valore di 'checkboxValue' alla casella di controllo). Con 'ngModel' possiamo associare all'evento' ngModelChange' che viene emesso ogni volta che la casella di controllo cambia. –

+1

Che versione angolare "2 stai usando. Ci sono stati problemi con il binding ad alcuni elementi di input in FF e IE ma sono stati risolti di recente: –

7

Se si aggiunge una doppia para- resi al riferimento di ngModel, si ottiene un legame bidirezionale con la proprietà del modello. Quella proprietà può quindi essere letta e utilizzata nel gestore eventi. Secondo me è l'approccio più pulito.

<input type="checkbox" [(ngModel)]="myModel.property" (ngModelChange)="processChange()" /> 
Problemi correlati