Угловой способ связывания элементов с одинаковым именем вместе

В angular у меня есть список флажков, которые привязаны к логическому значению, которое я получаю из json:

<div ng-repeat="err in rec.errorList"><input type="checkbox" ng-model="err.ignore" name="{{err.errorCode}}" ng-value="err.errorCode"  check-all="{{err.errorCode}}" /></div>

Но тем временем я пытаюсь установить все эти флажки с одинаковым именем при установке одного из флажков!

каков наилучший способ сделать это угловым способом? Я имею в виду, есть ли способ связать все эти флажки с одним и тем же атрибутом имени, например, вместе? Я попытался написать директиву, что-то вроде этого, но не знаю, как мне продолжить:

.directive("checkAll", function(){
    return {
        link: function(scope, element, attr){
            element.bind('change', function(){
                var errorCode = attr["checkAll"];
                var elms = scope.errorCode;             
            })
        }
    }
})

Вот пример того, что я на самом деле хочу сделать http://plnkr.co/edit/sLXGlXRh9vu7FETDmJd1?p=preview У меня может быть много списков, и я хочу, чтобы всякий раз, когда я нажимаю на один из этих флажков, обновлял все флажки с одним и тем же кодом ошибки, возможно, без повторного зацикливания на всех этих списках ошибок.


person Shilan    schedule 24.09.2015    source источник
comment
Вы смотрели на функцию $index? А имена динамических форм? Например, stackoverflow.com/questions/27513192/   -  person brianlmerritt    schedule 28.09.2015


Ответы (1)


Вы можете сделать это, просто используя одну и ту же ng-модель для каждого имени.

Это будет выглядеть так:

Контроллер

$scope.errorList = [{errorCode:1},{errorCode:2},
{errorCode:1},{errorCode:3},{errorCode:1},{errorCode:1},
{errorCode:2},{errorCode:1},{errorCode:3},{errorCode:3}];
$scope.checkboxByName = {};

Вид

  <div ng-repeat="err in errorList">
    <input type="checkbox" ng-model="checkboxByName[err.errorCode]">
  </div>

Если вам действительно нужна переменная error.ignore для каждой ошибки, вы можете добавить эту функцию:

 $scope.updateIgnore = function(){
  angular.forEach($scope.errorList, function(error){
   error.ignore = $scope.checkboxByName[error.errorCode];
  })
 }

И ng-change для всех ваших входов:

ng-change="updateIgnore()"

Вот плункер, показывающий полную реализацию

Надеюсь, это помогло.

person Okazari    schedule 24.09.2015
comment
Спасибо за ваш ответ. Я не уверен, что понимаю вас, я имею в виду, как на самом деле я могу привязать флажки как к err.errorCode, так и к err.ignore? а для чего error.signal? - person Shilan; 28.09.2015
comment
@Shilan Правильно, сигнал означает игнорирование, я просто назвал его неправильно. На самом деле вы делаете только одну привязку (к checkboxByName[error.errorCode] ) и обновляете все error.ignore при изменении одного из этих значений. (Благодаря функции updateIgnore()). Вы должны проверить plunker для живого примера. Если у вас есть еще вопрос, не стесняйтесь спрашивать. - person Okazari; 28.09.2015
comment
возможно, я не правильно объяснил свою проблему, вот пример моей проблемы: plnkr. co/edit/sLXGlXRh9vu7FETDmJd1?p=preview У меня может быть много списков ошибок, и мне нужно обновить другие флажки с тем же кодом ошибки, когда я нажимаю на один из них. Еще раз спасибо за ваше время - person Shilan; 28.09.2015
comment
к сожалению, именно так я получаю их от своего сервиса ajax. Я думал, можно ли связать их с чем-то вроде ng-model = err.ignore[err.errorCode], однако до сих пор не работал :( - person Shilan; 28.09.2015
comment
@Shilan Я могу заставить это работать так: plnkr.co/edit/TpMiYlPhxJhzoqTyLZqC?p=preview но он не будет обновлять err.ignore и я не уверен, что это то, что вам нужно - person Okazari; 28.09.2015
comment
Превосходно! :) Да это именно то, что я хочу! Я просто добавил это в чекбокс ng-checked = err.ignore == true, чтобы он инициализировался в самом начале. Спасибо еще раз - person Shilan; 28.09.2015