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();
これを別の約束にラップする必要があると思いますが、方法がわかりません。どんな助けでも大歓迎です。
ありがとう、