В приложении «Угловое» форма проверяется с помощью пользовательской функции JS перед отправкой. Исходя из условия, мне нужно показать диалог подтверждения пользователю, дождаться подтверждения или отклонения, а затем продолжить проверку. У меня возникают трудности с достижением этого асинхронно. Я считаю, что я не правильно использую обещание, но не уверен, что нужно обновлять.Проверка и обещание AngularJS
завод
app.factory("confirmDialogService", ['$q', 'ngDialog',
function ($q, ngDialog) {
return {
popConfirm: function() {
var deferred = $q.defer();
var confirmed;
setTimeout(function() {
ngDialog.openConfirm({
template: 'template/confirmDialog.html',
className: 'ngdialog-theme-default'
}).then(function (value) {
console.log('Modal promise resolved. Value: ', value);
deferred.resolve(confirmed = true);
}, function (reason) {
console.log('Modal promise rejected. Reason: ', reason);
deferred.reject(confirmed = false);
});
}, 1000);
return deferred.promise;
}
};
}]);
Контроллер
$scope.checkSomething = function(){
if(needsConfirmation)
{
console.log('about to pop confirm');
confirmationService.popConfirm().then(function(confirmed){
console.log('from popConfirm() ' + confirmed + ''); // never logged
return confirmed;
}, function(){
// something went wrong
return false;
});
}
else
return true;
}
диалоговое окно подтверждения показывается, но при нажатии да или нет в диалоге не дает результатов, как ожидалось.
То, что я хотел бы быть в состоянии сделать, это получить истинное/ложное значение в зависимости подтвердил, может ли пользователь или отклонил диалог, вдоль линий
var canProceed = $scope.checkSomething();
Я думаю, мне нужно, чтобы обернуть это в другое обещание, но не уверен, как это сделать. Любая помощь будет принята с благодарностью.
Спасибо,
Вам действительно нужно setTimeout? – dfsq
@dfsq: Я полагаю, что нет, но проблема остается. –
@me_ желательно? Здесь 'setTimeout' служит цели? (Это можно сделать с обещаниями, не волнуйтесь) –