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

0

В угловом, у меня есть список флажков, которые все привязаны к значению логического значения, которое я получаю из 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. У меня может быть много списков, и я хочу, чтобы каждый раз, когда я нажимаю на один из этих флажков, обновляю все флажки с тем же errorCode, возможно, без повторного включения всех этих списков ошибок.

  • 0
    Вы смотрели на функцию $ index? А имена динамических форм? Например, stackoverflow.com/questions/27513192/…
Теги:
checkbox
angularjs-ng-model

1 ответ

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 var для каждой ошибки, вы можете добавить эту функцию:

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

И изменение ng на всех ваших входах:

ng-change="updateIgnore()"

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

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

  • 0
    Спасибо за ваш ответ. Я не уверен, что следую за вами, я имею в виду, как на самом деле я могу связать флажки как с err.errorCode, так и с err.ignore? и что такое error.signal для?
  • 0
    @Shilan Правильно, сигнал остановлен для игнорирования, я просто назвал его. На самом деле вы выполняете только одну привязку (для checkboxByName [error.errorCode]) и обновляете все ошибки.ignore при изменении одного из этих значений. (Спасибо функции updateIgnore ()). Вы должны проверить поршень на живой пример. Если у вас есть вопрос, не стесняйтесь спрашивать.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню