Является новым как угловым, так и ионным. У меня есть всплывающее окно на моей странице, где я показываю пользователю поле ввода для ввода OTP и кнопки отправки. Когда я нажимаю кнопку отправки, я делаю вызов Ajax, чтобы проверить, действительно ли OTP.
Но я не могу закрыть всплывающее окно с помощью метода.close. Пожалуйста помоги
var OTPPopup = $ionicPopup.show({
title: 'OTP VERIFICATION',
templateUrl: 'templates/login/otp.html',
scope: $scope,
buttons : [{
text: 'Confirm OTP',
type: 'button-assertive',
onTap : function(e) {
e.preventDefault();
var validateResponse = validateOTP();
validateResponse.then(function(response){
console.log('success', response);
return response;
});
}
}]
}).then(function(result){
console.log('Tapped', result);
OTPPopup.close();
});
И ниже функция validateOTP
function validateOTP() {
var requestObj = {
authentication: {
email_id: $scope.loginForm.email,
security_code: $scope.OTP
}
};
return $q(function(resolve, reject) {
activateUser(requestObj, function(response){
if(response.error == null && response.data.isSuccess) {
console.log('validate correct');
resolve(response);
}
}, function(response){
return 'error';
});
});
}
activateUser
- это моя служба, которая делает вызов ajax. Пожалуйста, дайте мне знать, как я могу это понять.
console.log('success', response)
печатается внутри .then
но после возвращения чего-то из onTap
обещание всплывающего окна не вызывается.
Закончилось решение этого.
Это решение будет работать только в том случае, если на вашей странице имеется ровно один ionicPopup. Я просто написал эту строку кода, чтобы сделать трюк
$ionicPopup._popupStack[0].responseDeferred.resolve();
Это автоматически закрывает всплывающее окно. Весь код теперь проще с обычным Ajax без каких-либо q обещаний.
var OTPPopup = $ionicPopup.show({
title: 'OTP VERIFICATION',
templateUrl: 'templates/login/otp.html',
scope: $scope,
buttons : [{
text: 'Confirm OTP',
type: 'button-assertive',
onTap : function(e) {
// e.preventDefault() will stop the popup from closing when tapped.
e.preventDefault();
validateOTP();
}
}]
});
и в следующей функции
function validateOTP() {
var requestObj = {
authentication: {
email_id: $scope.loginForm.email,
security_code: $scope.loginForm.OTP
}
};
activateUser(requestObj, function(response){
if(response.error == null && response.data.isSuccess) {
localStorage.setLocalstorage = response.data.user[0];
$ionicPopup._popupStack[0].responseDeferred.resolve();
$state.go('dashboard.classified');
}
}, function(response){
});
}
вам не нужно вызывать e.preventDefault();
вы просто вернете обещание validateOTP
ionicPopup будет ждать обещания, а затем закрыть всплывающее окно
var OTPPopup = $ionicPopup.show({
title: 'OTP VERIFICATION',
template: 'templates/login/otp.html',
scope: $scope,
buttons : [{
text: 'Confirm OTP',
type: 'button-assertive',
onTap : function() {
return validateOTP();
}
}]
}).then(function(result){
console.log('closed', result); // result is the activateUser resolve response
});