2015-04-14 17 views
5

Ho un elenco di caselle di controllo. Devo disabilitare tutti gli elementi che hanno inizialmente il valore del modello impostato su false. Ma a causa del bind a due vie ho un problema quando deseleziono una casella di controllo diventa disabilitato. Come risolverlo?Disabilitare la casella di controllo con il collegamento unidirezionale

<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

Si può creare un esempio JSFiddle o Plunker? Grazie. – Hoyen

+0

In pratica, se puoi impostare un'altra proprietà in elemento come element.initValue, puoi impostare ng-disabled = "! Element.initValue" – Hoyen

+0

@Hoyen, lo so. Ma creare tutti i campi doppi solo per questo non sembra una buona idea. Pensavo ci dovesse essere qualcosa di meglio. – bambi

risposta

2

calcolata :: davanti un'espressione legame induce a essere valutata solo una volta. Questo dovrebbe ottenere quello che ti serve:

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

Ecco Angular's docs sul legame di una volta.

-1

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

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

+0

In base alla [documentazione di Angular] (https://docs.angularjs.org/api/ng/directive/ngInit), si deve usare solo 'ng-init' con' ng-repeat' per assegnare alias proprietà speciali. – SethGunnells

Problemi correlati