2014-07-01 4 views
0

모든 각도로 0-을 확인하려고합니다. 내 경우에는 모든 확인란을 선택하는 방법?

내가 가지고있는 다음과 같은 코드 :

<div> 
    <div class="checkbox"> 
      <input ng-click="checkAll =! checkAll" type="checkbox"/> check all 
    </div> 
    <div class="checkbox" ng-repeat="item in items"> 
      <input type="checkbox" ng-model="checkAll"/> {{item.title}} 
    </div> 
</div> 
check all이 것을 적용하지 않는 것 내가, 내가 check all을 클릭하면 내가 확인하고 개별 checkbox의 선택을 취소하는 경우, 그러나, 모든 checkboxes을 확인 할 수 있었다

개인 checkbox 더 이상. 누구든지이 문제에 대해 저를 도울 수 있습니까? 고마워요!

+0

참조 : http://stackoverflow.com/questions/12648466/how-can-i-get-angular-js-checkboxes-with-select-unsele ct-all-functionality-and-i –

답변

3

개정 답 :

directive을 사용하여 다른 대답에 다른 방법 :

app.directive('myCheckBox', function(){ 
    return { 
    restrict: 'E', 
    scope: { 
     checkAll: '=', 
    }, 
    template: '<input check-all="checkAll" type="checkbox" ng-model="check"/>', 
    replace: true, 
    link: function(scope) { 
     scope.$watch('checkAll', function(newVal){ 
     scope.check = newVal; 
     }) 
    }, 

    } 
}) 

내가 전달 된 부모 범위의 checkAll 새로운 지침의 범위와 그것을 위해 감시자를 추가했다.

plunker

올드 답 :

당신은 (범위의 상위 범위에 액세스) $parent를 사용할 수 있습니다

<input type="checkbox" ng-model="$parent.checkAll"/> {{item.title}} 

plunker

그리고 클릭 이벤트가 아닌 checkAll을 기본 체크 박스로도 ng-model으로 설정해야합니다.

문제는 각 반복에 대한 범위를 만드는 ngRepeat이 원인입니다.

+0

데모가 작동하지 않습니다. 모든 체크 박스는 똑같은 일을합니다 (모든 체크 박스를 선택/선택 해제합니다)."모두 확인"만 모든 상자를 선택해야합니다. a, b 및 c는 독립적으로 작동해야합니다. – Jerrad

+0

@Jerrad는 그가 원했던 것이라고 생각했습니다. 이제는 제가 잘못 읽었습니다. 그 위에. – Mosho

1

$scope.items의 모습을 표시하지 않았습니다. 그것이 프리미티브의 배열이라면, 그것은 문제입니다. ng-repeat은 부모 범위에서 상속 한 각 항목에 대해 새 범위를 만듭니다. 문제는 프리미티브의 경우 값의 복사본을 만들고 양방향 바인딩을 잃게된다는 것입니다. 대신 항목의 배열을 다음과 같이 개체 배열로 지정하십시오.

$scope.items = [ 
    {name: 'a', checked: false}, 
    {name: 'b', checked: false}, 
    {name: 'c', checked: false} 
]; 

"모두 선택"체크 박스에 대한 별도의 변수가 있어야합니다.

$scope.checkAllBoxes = function(){ 
    $scope.checkAll = !$scope.checkAll; 
    angular.forEach($scope.items, function(item){ 
     item.checked = $scope.checkAll; 
    }) 
} 

모두 위로 같은 바인딩 : 이제

$scope.checkAll = false; 

checked 속성을 모든 항목을 통해 루프 기능을 설정하고

<div class="checkbox"> 
     <input type="checkbox" ng-click="checkAllBoxes()" /> check all 
</div> 
<div class="checkbox" ng-repeat="item in items"> 
     <input type="checkbox" ng-model="item.checked"/> {{item.name}} 
</div> 

Demo

관련 문제