Пропустить объект за пределами ng-repeat - PullRequest
0 голосов
/ 20 мая 2018

Так что я новичок в AngularJs.В настоящее время я пытаюсь реализовать фильтрацию таблиц, а затем, когда я нажимаю на кнопку удаления, она должна удалить нужный объект.

Вот как я это делал до фильтрации:

$scope.rowIndex = -1;
$scope.selectRow = function(index) {
if (index == $scope.rowIndex)
  $scope.rowIndex = -1;
else
  $scope.rowIndex = index;
}
});

В моем html:

ng-repeat="session in sessons " ng-class="{'bg-primary':rowIndex == $index }" ng-click="selectRow($index)"

Теперь после реализации фильтрации я обнаружил, что $ index неверен ... Поэтому мне пришлось искать другой способ ... Я прочитал несколько статей и все сказал то же самое ... Япросто мог передать весь объект функции ... Но каждый пример делал это внутри ng-repeat.К сожалению ... я не могу этого сделать, так как у меня есть внешний div для модального.

Так как мне передать текущий выбранный сеанс / строку таблицы в функцию, которая находится в модальном режиме?{{deleteSession (session)}}

<div id="deleteSessionModal" class="modal fade">
  <div class="modal-dialog">
    <div class="modal-content">
      <form>
        <div class="modal-header">
          <h4 class="modal-title">Delete Session</h4>
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        </div>
        <div class="modal-body">
          <p>Are you sure you want to delete these Records?</p>
          <p class="text-warning">
            <small>This action cannot be undone.</small>
          </p>
        </div>
        <div class="modal-footer">
          <input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel">
          <input type="submit" class="btn btn-danger" value="Delete" ng-click="deleteSession(session)">
        </div>
      </form>
    </div>
  </div>
</div>

вот так выглядит моя html / таблица

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Вместо передачи $index в selectRow, отправьте session.speakerId или другой конкретный уникальный ключ сеансов:

ng-click="selectRow(session.speakerId)"

В вашем контроллере установлен / не установлен выбранный сеанс:

$scope.selectedSessionSpeakerId = null;

$scope.selectRow = function(sess) {
  if (sess == $scope.selectedSessionSpeakerId)
    $scope.selectedSessionSpeakerId = null;
  else
    $scope.selectedSessionSpeakerId = sess;
}

А ваша deleteSession функция не получает никаких аргументов.Он просто проверяет выбранный уникальный ключ сеанса и удаляет его из массива:

$scope.deleteSession = function() {
  if($scope.selectedSessionSpeakerId) {
    let index = $scope.sessions.findIndex(finction(itm) {
      return itm["speakerId"] == $scope.selectedSessionSpeakerId;
    });
    $scope.sessions.splice(index, 1);
    $scope.selectedSessionSpeakerId = null;
  }
}
0 голосов
/ 20 мая 2018

вы можете передать сеанс в качестве значения для выбора функции строки следующим образом:

ng-repeat="session in sessons " ng-class="{'bg-primary':rowIndex == $index }" ng-click="selectRow(session)"

и в функции selectRow вы можете взять Id из сеанса и удалить его из списка сеансов.

...