2

The problem is in binding the state of the checkbox (checked/unchecked) to the object values.

HTML:

<div ng:controller="Ctrl"> 
   <div ng:repeat="(letter, number) in obj">
     {{letter}} and {{number}}
     <input type="checkbox" ng:model="obj[letter]">
</div>    

Controller:

function Ctrl() {
    this.obj = {a:true,b:true};    
};​

When the first checkbox is clicked it affects the state of the second checkbox, but the model is correct, so obj becomes {a:false, b:true}.

Example can be found at http://jsfiddle.net/alexpetrov/tRxzr/

How to fix this?

2 Answers 2

6

Bind ng-repeat to objects rather than primitive types.

function Ctrl() {
    this.obj = [{id: 'a', checked: true}, {id: 'b', checked: true}];
}

http://jsfiddle.net/tRxzr/1/

Binding to primitive types confuses ng-repeat, it's a bug: https://github.com/angular/angular.js/issues/933

Sign up to request clarification or add additional context in comments.

1 Comment

Good news: this was fixed in September.
0

When the JSON is not entirely in your control, you get a primitive array instead of an object. You want to do an ng-repeat on the same.

To bind ng-repeats to checkboxes to a primitive array and get the selected items. See the plunker code here.

http://plnkr.co/edit/i6IiGY42h8CiOMaqT9SZ?p=preview

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.