2016-04-06 8 views
0

Unten ist mein Code. Wenn der Benutzer auf "Alle auswählen" klickt, werden alle Elemente ausgewählt.Angular unselect Element in allen ausgewählten Artikeln

was ich will ist, wenn Benutzer auf eine Option klicken, sollte diese Option deaktiviert werden.

var app = angular.module('sampleApp', []); 
 
app.controller('sampleController', ['$scope', 
 
    function($scope) { 
 
    $scope.selectAll = false; 
 

 
    } 
 
])
.disabled { 
 
    opacity: 0.5 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="sampleApp"> 
 
    <div ng-controller="sampleController"> 
 
    <label ng-click="selectAll = !selectAll">Select all</label> 
 
    <div ng-class="selectAll ? 'enable' : 'disabled'">Option 1</div> 
 
    <div ng-class="selectAll ? 'enable' : 'disabled'">Option 2</div> 
 
    <div ng-class="selectAll ? 'enable' : 'disabled'">Option 3</div> 
 
    <div ng-class="selectAll ? 'enable' : 'disabled'">Option 4</div> 
 
    </div> 
 
</div>

Antwort

2

Sie müssen jedes Element in ein neues Objekt wickeln und ein Feld 'ausgewählt' auf dieses Objekt platzieren:

var app = angular.module('sampleApp', []); 
 
app.controller('sampleController', ['$scope', 
 
    function($scope) { 
 
    $scope.options = [{ 
 
     selected: false, 
 
     item: 'option 1' 
 
    }, { 
 
     selected: false, 
 
     item: 'option 2' 
 
    }, { 
 
     selected: false, 
 
     item: 'option 3' 
 
    }] 
 

 
    $scope.selectAll = function(select) { 
 
     angular.forEach($scope.options, function(o) { 
 
     o.selected = select; 
 
     }); 
 
    }; 
 

 
    } 
 
])
.disabled { 
 
    opacity: 0.5 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="sampleApp"> 
 
    <div ng-controller="sampleController"> 
 
    <label ng-click="selectAll(true)">Select all</label> 
 
    <label ng-click="selectAll(false)">Deselect all</label> 
 
    <div ng-repeat="option in options" ng-class="{'disabled': !option.selected}" ng-click="option.selected = !option.selected">{{option.item}}</div> 
 
    </div> 
 
</div>

+0

Dank für Sie beantworten . Allerdings habe ich Beispiel mit nur 4 Optionen gegeben. In Wirklichkeit habe ich mehrere Optionen. Gibt es einen anderen Weg als "$ scope.option" hinzuzufügen. Ich habe statischen HTML geschrieben. Für die jede Option in verschiedenen Div. – Tushar

+0

Wenn Sie die ng-Klasse für jede einzelne Option anwenden möchten, müssen Sie die Optionen irgendwie auf den $ scope setzen. Andernfalls kann angular die Bindung nicht anwenden. – fikkatra

+0

in meiner Lösung, jede Option ist ein anderes Div auch, weil ich ng-repeat. Das Gute an der Verwendung von ng-repeat ist, dass Sie so viele Optionen hinzufügen oder entfernen können, wie Sie möchten, und Ihr Code wird weiterhin funktionieren – fikkatra

Verwandte Themen