Я прокручиваю некоторые элементы в AngularJS и запрашиваю пользовательский ввод по каждому элементу с помощью мода AngularUI. Моя проблема в том, что цикл завершается, и все модалы визуализируются сразу, не дожидаясь пользователя.Приостановить выполнение, пока AngularUI modal открыт
Как я могу выполнить выполнение до тех пор, пока модальный не будет закрыт?
Пример моего кода:
var listofitems = somelist;
// loop through each item
for (var i in listofitems){
if (listofitems[i].id == presetId){
// ask user confirmation in a modal
$scope.selections = {'doThis': doThis,
'doThat': doThat}
var openModal = function() {
var modalInstance = $modal.open({
templateUrl: 'confirmationModal.html',
controller: confirmationController,
resolve: {
selections: function() {
return $scope.selections;
}
}
});
modalInstance.result.then(function (selections) {
doThis = selections.doThis;
if (selections.doThat){
doThis = selections.doThis;
}
});
}
// open the modal
openModal();
}
}
}
var confirmationController = function ($scope, $modalInstance, selections) {
$scope.selections = selections;
$scope.doThis = function() {
$scope.selections.doThis = true;
$modalInstance.close($scope.selections);
};
$scope.doThat = function() {
$scope.selections.doThat = true;
$modalInstance.close($scope.selections);
};
};
Включение @dsfg ответить вот Plunkr example. Модели ui не работают так хорошо, но вы можете видеть, что выполнение завершилось до того, как пользователь отправил какой-либо ввод.
Это действительно меня смущает. Я уверен, что правильно выполнил ваш пример, и похоже, что модальные файлы открываются последовательно, а не все сразу. Но исполнение по-прежнему продолжается, как всегда. Ведение журнала показывает, что 'then()' не выполняется, но почему-то 'checkItems()' вызывается до тех пор, пока не будет больше ключей. Я собираюсь посмотреть, могу ли я поиграть в скрипку. – Niel
И я редактировал код на моей стороне, поэтому 'if (keys.length) {checkItems();}' вызывается, даже если идентификаторы не совпадают. – Niel
Ну, вы помещаете свой код в цикл, который не остановится. Вместо этого попробуйте реорганизовать свой код в массив обещаний и установить флаг, когда все обещания будут разрешены. http://plnkr.co/edit/1Eq5kNLOun9kn6PXsXhT?p=preview – dfsq