2015-04-14 12 views
5

Mam jedną listę wyboru. Muszę najpierw wyłączyć wszystkie elementy, które mają wartość modelu ustawioną na false. Ale z powodu dwukierunkowego wiązania mam problem, gdy odznaczam jedno pole wyboru, staje się on wyłączony. Jak to rozwiązać?Wyłączanie pola wyboru z jednym sposobem wiązania

<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> 
+0

można utworzyć przykład JSFiddle lub Plunker? Dzięki. – Hoyen

+0

Ale zasadniczo, jeśli możesz ustawić inną właściwość w elemencie takim jak element.initValue, możesz ustawić ng-disabled = "! Element.initValue" – Hoyen

+0

@ Hoyen, wiem o tym. Ale tworzenie wszystkich podwójnych pól właśnie z tego powodu nie wydaje się dobrym pomysłem. Myślałem, że musi być coś lepszego. – bambi

Odpowiedz

2

Dodawanie :: przed wyrażeniem wiązania powoduje, że są obliczane tylko raz. To powinno Ci to, czego potrzebujesz:

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

Oto Angular's docs na wiążącego jednorazową.

-1

Spróbuj użyć ng inicjalizacji:

<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> 

Oto JSFiddle: http://jsfiddle.net/jz65o9tv/

+0

Zgodnie z dokumentacją [Angular's documentation] (https://docs.angularjs.org/api/ng/directive/ngInit), powinieneś używać tylko 'ng-init' z' ng-repeat' do aliasu właściwości specjalnych. – SethGunnells