2016-04-24 10 views
2

私の見解では<p>デバッグするためのものでAngularJsのCheckBox難問

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

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

を持っています。それはshoudl、データを所与としては、falseを示しているが、コントローラ

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

Iは、最初のコード行にブレークポイントに、campaign.pausedの値はtrueあります(!)。

コードを検索しましたが、campaign.pausedは他の場所には書き込まれていません。

ここで何が起こっている可能性がありますか?


[更新]私はそれが$eventを「飲み込む」と親にpropogatingからそれを防ぐために必要があるので、私は、私はそのentirityに示されていないng-click fucntionを、使用しています。

+0

あなたは 'campaign.paused =! campaign.paused; 'campaign.paused'が正常であることを伝える – Akis

+0

申し訳ありませんが、私のコメントは分かりません。そのステートメントは、現在の値を切り替えることになっています。あなたはそれに間違いを見ますか? – Mawg

+1

はシンプルです。チェックボックスをクリックすると、モデル 'ng-model =" campaign.paused "は" true "の値を取得します。これはAngularのために自動的に行われます。あなたのコードで何をするかは、それを逆にして、チェックボックスがクリックされていないときは真、そうであれば偽になります。あなたはng-modelディレクティブhttps://docs.angularjs.org/api/ng/directive/ngModel – Akis

答えて

2

これは、チェックボックスをクリックするとng-modelが値を更新しているからです。あなたはAngularがあなたのためにやっていることを元に戻しています。

$scope.CampaignPauseClicked機能で自分でやりたい場合は、ng-model部分をhtmlから削除してください。

そうでなければ、Angularにそのことをさせ、ng-model="campaign.paused"句を残して、ng-clickコールバックから最初の行を削除することができます。

+0

Lolx !!を読む必要があるようです。どのように私はそんなに無駄なn00bの間違いを作ることができますか?もちろん、あなたの正しい(+1と答え)。チェックされた状態を切り替える必要はありません。なぜなら、 'ng-model'は私のためにそうしているからです。どのように恥ずかしい: -/ – Mawg

1

チェックボックスを使用しているため、ng-clickng-changeディレクティブに置き換えることもできます。 ng-changeは、チェックボックスの状態が

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

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

そして、あなたのコントローラに(チェック/チェックなし)に変更されるたびに実行されます:

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

別のオプションは、ここにng-checkeddirectiveだろうこのplunkerの例です。あなたがはっきりとわかるように、チェックボックスモデルは、チェックされている場合にのみtrueを返します。

+1

ありがとう(+1)。私は 'ng-clck 'を使う必要があると私は説明しなかったので、私は謝罪しました。 – Mawg