Элемент TR вызывает флажок с помощью ng-click, но флажок ng-change on не сработает

Я успешно создал функцию проверки скрытого флажка при нажатии ng в строке, в которой существует флажок, созданный с помощью ng-repeat. Тем не менее, у меня также есть функциональность, которая добавляет этот элемент в отдельный массив, когда флажок установлен с помощью директивы ng-change.

Мой код работает отлично, если я убираю элемент и проверяю флажок напрямую, но если я использую директиву ng-click на TR, флажок проверяется (визуально), но массив не обновляется. Если я снова нажму на него, он останется отмеченным, и элемент будет добавлен в новый массив.

Это не проблема, когда ng-click берет два щелчка, чтобы выстрелить. Вот моя разметка:

<tr ng-cloak ng-repeat="item in mostRecent | orderBy:sortType:sortReverse | filter: query" class="hovered" ng-class="{'hide':showReports && item.status == 'Not Started' || showReports && item.status == 'inProgress','rep-checked': bool}" ng-click="bool = !bool">
        <td class="hidden"><div class="checkbox">
            <label class="checkbox">
              <input type="checkbox" ng-change="sync(bool, item)" ng-model="bool" ng-checked="isChecked(item)">
            </label>
          </div></td>

и JS:

$scope.isChecked = function(id) {
          var match = false;
          for(var i=0 ; i < $scope.selectionData.length; i++) {
              if($scope.selectionData[i].id == id){
                match = true;
              }
          }
          return match;
};

// Create a new array from the selected data
$scope.selectionData = [];

var selectionData = $scope.selectionData;
var result = selectionData.filter(function(e){ return e.id == id; });

$scope.sync = function(bool, item){
                if ($scope.selectionData) {
                  $scope.selectionData.push(item);
                }
                else {
                  $scope.selectionData.splice(item);
                }
                    console.log('check' + $scope.selectionData);
};

1 ответ

После более глубокого исследования я обнаружил, что функция ng-click на входе не регистрируется, потому что функция ng-click элемента tr на самом деле не эмулирует событие click на входе. Я добавил динамический идентификатор и заменил функцию ng-click функцией javascript

getElementById('checkboxID').click();

И это сработало, как и ожидалось.

Другие вопросы по тегам