如何检查所有带角度的复选框

时间:2015-02-12 02:36:56

标签: javascript php angularjs laravel checkbox

我有一个复选框,应该检查所有复选框。该复选框通过选中所有复选框来正常工作,但是角度并不认为它们已被检查过? angular知道它们是否被检查的唯一方法是我是否手动检查每一个。 (括号和for循环是来自laravel的刀片php)

<label class="checkbox-inline">
  <input type="checkbox" ng-model="everyoneCheck"/> Everyone
</label>
@foreach($company->users as $tagIndex => $user)
    <label class="checkbox-inline">
      <input type="checkbox" ng-checked="everyoneCheck" ng-model="newDiscussion.notify_partners[{{$tagIndex}}]" ng-true-value="{{$user->id}}" /> {{ $user->first_name }} {{ $user->last_name }}
    </label>                  
@endforeach
单击提交按钮后,我继续将$ http.post发送到我的服务器,我只是将一个对象传递给post函数,这就是对象。

var discussionData = {
    'title': $scope.newDiscussion.title,
    'discussion': $scope.newDiscussion.summary,
    'company_id': company_id,
    'notify_partners': $scope.newDiscussion.notify_partners
};

由于某种原因,当我使用check all方法时,没有任何内容被放入notify_partners,但是当我手动点击每个复选框时,它们将被输入并正确提交。

有任何帮助吗?我觉得它是某种约束性问题,我只需要告诉棱角分明,嘿它更新了!

2 个答案:

答案 0 :(得分:1)

这是一种方法:

<p><input type="checkbox" ng-model="globalCheck" ng-click="toggleCheckAll()" /> Check All</p>

<ul>
    <li ng-repeat="i in init">
        <input type="checkbox" ng-model="checkbox[$index]" /> Checkbox {{ $index + 1 }} {{ checkbox[$index] }} 
    </li>
</ul>

然后在你的控制器中:

function myControl($scope) {

    $scope.globalCheck = false;
    $scope.checkbox = {};
    $scope.init = [0,1,2,3,4,5,6,7,8,9];

    $scope.toggleCheckAll = function() {
        var k, val = !$scope.globalCheck;
        console.log(val);
        for(k in $scope.init) {
            $scope.checkbox[k] = val;
        }
    }

}

请参阅JSfiddle了解工作示例

答案 1 :(得分:0)

ng-checked不会更新ng-model中的值。它只影响元素本身的checked属性。

最好的办法是使用ng-change执行某些功能并相应地更新所有模型。

<input type="checkbox" 
   ng-model="everyoneCheck"
   ng-change="toggleCheckAll()"/>

在您的控制器中,您可以toggleCheckAll()循环模型,并根据everyoneCheck

的值设置它们