在 Angular 应用程序中,表单在提交之前通过自定义 JS 函数进行验证。根据条件,我需要向用户显示一个确认对话框,等待确认或拒绝,然后继续进行验证。我在异步实现这一点时遇到了困难。我相信我没有正确使用承诺,但不确定需要更新什么。
工厂
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();
我想我需要把它包装成另一个承诺,但不确定如何。任何帮助将不胜感激。
谢谢,