2015-04-14 12 views
5

Ich habe eine Checkbox-Liste. Ich muss alle Elemente deaktivieren, deren Modellwert anfänglich auf "false" gesetzt ist. Aber wegen der Zwei-Wege-Bindung habe ich ein Problem, wenn ich ein Kontrollkästchen deaktiviere, wird es deaktiviert. Wie man es löst?Deaktivieren der Checkbox mit Einwegbindung

<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

Können Sie eine JSFiddle oder Plunker Beispiel erstellen? Vielen Dank. – Hoyen

+0

Aber im Grunde, wenn Sie eine andere Eigenschaft in Element wie Element.initValue setzen können, können Sie festlegen ng-disabled = "! Element.initValue" – Hoyen

+0

@Hoyen, ich weiß das. Es ist jedoch keine gute Idee, alle doppelten Felder zu erstellen. Ich dachte, es muss etwas Besseres geben. – bambi

Antwort

2

:: vor einem verbindlichen Ausdruck Hinzufügen bewirkt, dass es nur einmal ausgewertet werden. Dies sollte Sie bekommen, was Sie brauchen:

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

Hier Angular's docs auf einmalige Bindung.

-1

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

Hier ist JSFiddle: http://jsfiddle.net/jz65o9tv/

+0

Gemäß [Angulars Dokumentation] (https://docs.angularjs.org/api/ng/directive/ngInit) sollten Sie 'ng-init' nur mit' ng-repeat' verwenden, um spezielle Eigenschaften zu aliasieren. – SethGunnells

Verwandte Themen