bambi
bambi

Reputation: 1179

Disabling checkbox with one way binding

I have one checkbox list. I need to disable all elements which have model value set to false initially. But because of two way binding I have a problem when I deselect one checkbox it becomes disabled. How to solve it?

<div class="item-s" ng-repeat="element in model.elements">
    <input id="element{{$index.toString()}}"
        type="checkbox"
        ng-true-value="true"
        ng-false-value="false"
        ng-model="element.value"
        ng-disabled="!element.value" />
    <label for="element{{$index.toString()}}">{{element.name}}</label>
</div>

Upvotes: 6

Views: 1725

Answers (2)

Hoyen
Hoyen

Reputation: 2519

Try using ng-init:

<div id="myApp" ng-controller="MyController">
    <div class="item-s" ng-repeat="element in model.elements">
        <input id="element{{$index.toString()}}" type="checkbox" ng-true-value="true" ng-false-value="false" ng-model="element.value" ng-init="initValue = element.value" ng-disabled="initValue==false" />
        <label for="element{{$index.toString()}}">{{element.name}}</label>
    </div>
</div>

Here is JSFiddle: http://jsfiddle.net/jz65o9tv/

Upvotes: -1

SethGunnells
SethGunnells

Reputation: 1269

Adding :: in front of a binding expression causes it to only be evaluated once. This should get you what you need:

ng-disabled="::!element.value"

Here's Angular's docs on one-time binding.

Upvotes: 2

Related Questions