2017-02-15 3 views
1

Ich erhalte ein unerwartetes Checkboxverhalten.Merkwürdiges md-checkbox Verhalten, wenn anfängliches Klicken geschieht

Wenn ich zunächst auf meine Checkbox klicke, komme ich zur Funktion check() des Facility-Objekts, und this.check ist FALSE, wie es sein sollte. Meine Toggle-Anweisung !this.checked funktioniert entsprechend, und dem NewState wird der Wert TRUE zugewiesen. In der nächsten Zeile, der Wert TRUE ist this.checked zugewiesen, sehe ich die Welligkeit, aber keine Überprüfung erscheint.

Wenn ich dieses Kontrollkästchen später anklicke, komme ich wieder zur check() - Funktion des Facility-Objekts, und obwohl das Kontrollkästchen nicht aktiviert ist, ist dieser.check-Wert TRUE. Meine toggle-Anweisung funktioniert wieder, und der newState hat den Wert FALSE, und this.checked ist jetzt FALSE. Seltsamerweise erscheint danach der Scheck.

Was ist los?

Elternteil TreeNode Klasse

export class TreeNode { 
    id: string; 
    name: string; 
    checked: boolean; 

    constructor(id: string, name: string) { 
     this.id = id; 
     this.name = name; 
     this.checked = false; 
    } 
} 

Kindersitz Klasse

import { TreeNode } from './tree-node'; 

export class Facility extends TreeNode { 

    constructor(id: string, name: string) { 
     super(id, name); 
    } 

    check() { 
     console.log('Facility Check: facility = '+ this.name); 
     let newState = !this.checked; 
     this.checked = newState;; 
    } 
} 

HTML-Code, iteriert über eine Einrichtung Array

<div *ngFor="let facility of facilities" > 
    <md-checkbox [checked]="facility.checked" (click)="facility.check()"> 
    {{facility.name}}</md-checkbox> 
</div> 

Antwort

3

Sie müssen statt den (ändern) Ereignis verwendet werden (Klick), so:

Ansonsten
<md-checkbox [checked]="facility.checked" (change)="facility.check()"> 

, möglicherweise aufgrund zu welchem ​​Zeitpunkt des (Klick) Ereignis ruft Ihre „check“ Methode, der Inhalt Ihrer „geprüft“ boolean erhalten vermasselt.

Außerdem, wenn alles, was Sie in Reaktion auf die Änderung tun möchten, ist die Boolesche pflegen können Sie es mit Zweiwege-Daten tun über ngModel Bindung wie folgt:

<md-checkbox [(ngModel)]="facility.checked"> 
+0

Ist dies eine gemeinsame Arbeit um? Ich werde das morgen ausprobieren. Danke für Ihre Antwort. –

+0

Ich würde sagen, dass mehr als eine Abhilfe ist der Weg mit der Handhabung der md-Checkbox aktiviert Zustand Wechsel zu gehen. Ich habe die Antwort bearbeitet Fall mit ngModel in eine Option hinzufügen, die Sie nicht wirklich brauchen andere aus Gründen der Änderung Ereignis zu reagieren, als dass boolean beibehalten wird. –

+0

Das hat funktioniert. Danke Fredy. –

Verwandte Themen