2

我正在使用以下 AngularJS 代码...

<div ng-controller="MyCtrl">

   <h4>I have {{friends.length}} friends. They are...</h4>

<span id="selectall" ng-click="selectAllFriends()"><u>Select All</u></span>  <br>

<ul class="example-animate-container">
<li class="animate-repeat" ng-repeat="friend in friends">
<input 
type="checkbox" 
value="{{friend.id}}"
ng-checked="friend.checked"
ng-model="friend.checked"
>
{{friend.id}} {{friend.name}} who is {{friend.age}} years old.
</li>
</ul>

<pre><strong>{{selectedFriends().length}} selected with filter:</strong> {{friends | filter:{checked:true} | json}}</pre>

<script>
function MyCtrl($scope, $filter) {
  // fruits
  $scope.friends = [
                        {id: 1, name:'John', age:25, gender:'boy'},
                        {id: 2, name:'Jessie', age:30, gender:'girl'},
                        {id: 3, name:'Johanna', age:28, gender:'girl'},
                        {id: 4, name:'Joy', age:15, gender:'girl'},
                        {id: 5, name:'Mary', age:28, gender:'girl'},
                        {id: 6, name:'Peter', age:95, gender:'boy'},
                        {id: 7, name:'Sebastian', age:50, gender:'boy'},
                        {id: 8, name:'Erika', age:27, gender:'girl'},
                        {id: 9, name:'Patrick', age:40, gender:'boy'},
                        {id: 10, name:'Samantha', age:60, gender:'girl'}
                    ];

    $scope.selectAllFriends = function() {
        angular.forEach($scope.friends, function(friend){
            friend.checked = true;
        });
    };

  $scope.selectedFriends = function () {
    return $filter('filter')($scope.friends, {checked: true});
  };
}
</script>

这是jsfiddle

全选功能工作正常,但我想添加的是:单击全选后,它的文本应更改为取消全选,并且应取消选中所有复选框,我认为可以使用切换,请帮助我,谢谢。

4

3 回答 3

6

你的跨度

<span id="selectall" ng-click="toggleSeleted()"><u>{{selectText}}</u></span>

以及控制器的变化...

    $scope.allSelected = false;
    $scope.selectText = "Select All";

    $scope.toggleSeleted = function() {
        $scope.allSelected = !$scope.allSelected;
        angular.forEach($scope.friends, function(friend){
            friend.checked = $scope.allSelected;
        });

        /*Change the text*/
        if($scope.allSelected){
            $scope.selectText = "Deselect All";
        } else {
            $scope.selectText = "Select All";
        }
    };

是一个工作小提琴。使用两个变量allSelectedselectText并根据选择进行更改。

于 2013-09-17T10:08:49.720 回答
3
$scope.selectAllFriends = function() {
    angular.forEach($scope.friends, function(friend){
        friend.checked = true;
    });
};

替换为:

$scope.isAll = false;               
    $scope.selectAllFriends = function() {

        if($scope.isAll === false) {
        angular.forEach($scope.friends, function(friend){
            friend.checked = true;
        });
    $scope.isAll = true;        
    } else {
    angular.forEach($scope.friends, function(friend){
            friend.checked = false;
        });
    $scope.isAll = false;       
    }
    };

演示

于 2013-09-17T09:53:12.783 回答
2
<span id="selectall" ng-click="selectAllFriends()">
    <u>
        {{allSelected && 'Deselect All' || 'Select All'}}
    </u>
</span>

在控制器中:

$scope.allSelected = false;         
$scope.selectAllFriends = function() {
    if($scope.allSelected){
        $scope.allSelected = false;
        angular.forEach($scope.friends, function(friend){
            friend.checked = false;
        });
    }
    else    {
        $scope.allSelected = true;
        angular.forEach($scope.friends, function(friend){
            friend.checked = true;
        });
    }
};
于 2013-09-17T09:54:49.553 回答