2015-02-12 7 views
2

У меня есть флажок, который должен проверять все флажки. Флажок работает как следует, проверяя все флажки, однако угловые не думают, что они были проверены? Единственный способ, которым угловой знает, проверены ли они, - это проверить вручную. (Скобки и цикл являются лезвие PHP от Laravel)Как проверить все флажки с угловыми

<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 на мой сервер, я просто передать в объекте функции поста, это это объект.

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

по какой-то причине, когда я использую проверку все подход, ничего не получает положенную в notify_partners, однако, когда я вручную нажмите каждый флажок, они будут введены и представлены надлежащим образом.

Любая помощь? Я чувствую, что это своего рода проблема с привязкой, где мне просто нужно сказать угловатое, эй, его обновление!

+0

Использование ng-checked будет только обновлять вид, а не модель – Emmanuel

+0

, что имеет смысл, почему ее не работает тогда, любая идея лучшего подхода? –

+0

Да, создавая функцию и зацикливая над значениями модели (см. Мой ответ ниже) – Emmanuel

ответ

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 для рабочего примера

+0

Просто исправлена ​​опечатка в приведенном выше ('$ scope.newDiscussion.notify_partners [k]') – Emmanuel

+0

Этот код, похоже, не проверяет их всех, не уверен Зачем. '$ scope.checkAll = function() { \t var val = $ scope.everyoneCheck; \t для (var i = 0; i <$ scope.newDiscussion.notify_partners.length; i ++) { \t $ scope.newDiscussion.notify_partners [i] = val; \t} \t} ' –

+0

цикл for не запущен, потому что' $ scope.newDiscussion.notify_partners' ничего не имеет в нем. В первый раз, когда свойство заполнено, это вид, который является кодом, который вы видели вверху. Первоначально я инициировал свойство в своей функции init с помощью '$ scope.newDiscussion.notify_partners = [];' –

0

ng-checked не обновляет значение в ng-model. Это влияет только на наличие атрибута checked на самом элементе.

Лучше всего использовать ng-change, чтобы выполнить некоторые функции и соответственно обновить все ваши модели.

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

И в контроллере, вы можете иметь toggleCheckAll() петлю над вашими моделями и установить их на основе стоимости everyoneCheck

Смежные вопросы