2016-04-24 10 views
2

Meine Ansicht hatAngularJS CheckBox conundrum

<input type="checkbox" class="check_box" ng-model="campaign.paused" 
     ng-click="CampaignPauseClicked(campaign, $event)" /> 

<p>campaign.paused == {{campaign.paused}}</p>       

mit der <p> für das Debuggen ist. Es zeigt false, wie es shoudl, die Daten gegeben, aber in der Steuerung

$scope.CampaignPauseClicked = function(campaign, $event) 
{ 
    campaign.paused = ! campaign.paused; 

, wenn ich auf der ersten Codezeile Haltepunkt, der Wert von campaign.paused ist true (!).

Ich habe den Code gesucht und campaign.paused wird nicht an anderer Stelle geschrieben.

Irgendeine Idee, was hier geschehen könnte?


[Update] Ich verwende eine ng-click fucntion, die ich nicht in seiner entirity gezeigt, weil ich es muss „schlucken“ die $event und verhindern, dass es zu den Eltern von propogating.

+0

da Sie tun 'campaign.paused =! campaign.paused; 'normal für' campaign.paused', um wahr zu sein – Akis

+0

Es tut mir leid, aber ich verstehe Ihren Kommentar nicht (mein Schlechter). Diese Anweisung soll den aktuellen Wert umschalten. Siehst du etwas falsch darin? – Mawg

+1

ist es einfach. Wenn Sie auf das Kontrollkästchen klicken, wird Ihr Modell 'ng-model =" campaign.paused "' den Wert von 'true' erhalten, dies wird automatisch aufgrund von Angular gemacht. Was Sie in Ihrem Code tun, ist, das umzukehren und true zu haben, wenn das Kontrollkästchen nicht angeklickt ist, und false, wenn es aktiviert ist. Es sieht so aus, dass Sie auf der ng-Modell-Richtlinie lesen müssen https://docs.angularjs.org/api/ng/directive/ngModel – Akis

Antwort

2

Das liegt daran, ng-model aktualisiert den Wert, wenn Sie auf das Kontrollkästchen klicken. Du annullierst, was Angular für dich tut.

Wenn Sie es selbst in Ihrer $scope.CampaignPauseClicked Funktion tun möchten, entfernen Sie den ng-model Teil aus dem HTML.

Andernfalls können Sie Angular lassen ihre Sache, lassen Sie die ng-model="campaign.paused" Klausel, und entfernen Sie die erste Zeile von Ihrem ng-click Rückruf.

+0

Lolx !! Wie könnte ich einen solchen ahnungslosen n00b Fehler machen ?? Natürlich, dein richtiges (+1 und die Antwort). Es besteht keine Notwendigkeit für mich, den überprüften Zustand umzuschalten, da das 'ng-Modell' das für mich macht. Wie peinlich: -/ – Mawg

1

Auch Sie können die durch die ng-change Direktive ersetzen, da Sie ein Kontrollkästchen verwenden. ng-change wird jedes Mal die Checkbox Zustand ausgeführt wird geändert (aktiviert/deaktiviert)

<input type="checkbox" class="check_box" ng-model="campaign.paused" 
     ng-change="CampaignPauseChanged ($event)" /> 

<p>campaign.paused == {{campaign.paused}}</p> 

Und in Ihrem Controller:

$scope.CampaignPauseChanged = function(event) 
{ 
    console.log(campaign.paused) 
    console.log(event) 
} 

Eine weitere Möglichkeit der ng-checkeddirective hier wäre ein Beispiel in diesem plunker. Wie Sie deutlich sehen können, gibt das Checkbox-Modell nur dann true zurück, wenn es aktiviert ist.

+1

Danke (+1). Ich applaugiere, weil ich nicht erklärt habe, dass ich "ng-clck" benutzen muss - ich habe jetzt die Frage aktualisiert, um zu erklären, warum. – Mawg