У меня есть arraylist, который используется для отображения рабочего процесса запроса на отпуск. Если запрос на отпуск в настоящее время сохраняется как черновик, запрос добавляется в мой проект списка, однако, если он был отправлен из модальной формы, подлежащей утверждению, ее необходимо будет удалить из проекта списка и добавить в список утверждений. Мой вопрос заключается в том, что этот список является внешним по отношению к моей форме, и моя форма не знает индекса списка. Когда я обновляю свой запрос из проекта для утверждения, как его удалить из черновика списка и добавить его в утвержденный список, не зная индекса.angularjs удалить из массива без знания индекса
Первой мыслью, которая пришла на ум, было создание уникального атрибута с базой данных pk, например data-approval="7"
, и выбрать ее с помощью какой-либо функции jquery и удалить элемент из списка, но из того, что я прочитал, это isn угловой способ сделать что-то. Итак, не зная индекс, как удалить элемент из моего списка в angularjs?
Пример цикла.
<ul>
<li ng-repeat="e in pendingApprovals" data-approval="{{e.id}}">
<div class="alert alert-info">
<h5>{{e.title}}</h5>
<div>
{{e.type}}
</div>
{{e.start | date:'MM/dd/yyyy - hh:mm a'}}
{{e.end | date:'MM/dd/yyyy - hh:mm a'}}
<a ng-click="rejectClick(e.id)" class="btn btn-danger btn-xs btn-block">
<i class="fa fa-thumbs-down fa-1"></i>
Reject
</a>
<a ng-click="approveClick($index, e.id)" class="btn btn-success btn-xs btn-block">
<i class="fa fa-thumbs-up fa-1"></i>
Approve
</a>
</div>
</li>
</ul>
JS
modalInstance.result.then(function(formData) {
$http.post('./calendar/save.json', formData).then(
function(response) {
if(formData.update) {
$scope.refresh();
console.log('refresh')
angular.element(elem[0].querySelector('[data-unsubmitted="' + response.data.id + '"]')).remove();
} else {
$scope.events.push(response.data);
$scope.pendingApprovals.push(response.data);
}
}, function(response) {
console.log('failure ' + response)
// called asynchronously if an error
// occurs
// or server returns response with an
// error status.
});
}, function() {
$log.info('Modal dismissed at: ' + new Date());
});
Когда вы передаете свой объект рабочего процесса в виде модального вы передать весь объект? Если да, то он не содержит какой-то уникальный идентификатор? В любом случае вам нужно что-то, чтобы иметь возможность настроить таргетинг на этот конкретный объект рабочего процесса. Если у вас есть [array.filter] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), вы сможете отфильтровать этот элемент/с. Фильтр позволит вам выполнять логику по всему объекту, используя любое свойство или свойства, чтобы определить, должно ли оно оставаться. 'pendingApprovals = pendingApprovals.filter (x => x.id! == e.id)'; – ste2425
Я открываю модальный диалог, используя библиотеку fullcalendar. Мой список рабочих процессов является внешним по отношению к моему календарю. Я добавил код выше, чтобы показать, как я добавляю уникальный идентификатор для каждого из моих элементов списка, и этот идентификатор доступен мне в ответе $ http.post. Оттуда я потерялся. Я пробовал что-то подобное, но потерпел неудачу. querySelector ('[data-unsubmitted = "' + response.data.id + '"]')). remove(); –
@ ste2425 также, мои $ scope.pendingApprovals, кажется, пустые во время моего ответа. См. Пример кода выше. –