2016-05-20 2 views
0

Я хочу открыть ионную модальность, когда пользователь нажимает на кнопку Да, но близко ионную всплывающее окно, когда пользователь нажимает Нет кнопку. Как я могу это сделать?Огонь ionicModal на ionicPopup близко

В настоящий момент открывается ионное всплывающее окно в каждом случае. Вот мой код до сих пор:

services.js

function PopupService($ionicPopup) { 

    function acceptAppointmentPopup(scope) { 
    return $ionicPopup.show({ 
     title: 'Are you sure you want to accept this appointment?', 
     scope: scope, 
     buttons: [{ 
     text: '<b>Yes</b>', 
     type: 'button-positive', 
     onTap: function(e) {} 
     }, { 
     text: 'No', 
     onTap: function(e) {} 
     }, ] 
    }) 
    } 

    return { 
    acceptAppointmentPopup: acceptAppointmentPopup 
    }; 
} 

controller.js

function BusinessPendingAcceptanceCtrl($scope, PopupService, ModalService) { 

    $scope.newMessageModal = function() { 
    ModalService.show('templates/modals/new-message.html', 'ConsumerNotificationsCtrl as vm'); 
    } 

    $scope.showAcceptAppointmentPopup = function() { 
    $scope.data = {} 
    var myPopup = PopupService.acceptAppointmentPopup($scope); 
    myPopup.then(function(res) { 
     $scope.newMessageModal(); 
    }); 
    }; 
} 
+1

Вы используете-услуги e неправильно, служба не должна иметь никакого взаимодействия с пользовательским интерфейсом с точки зрения дизайна. Это большой запах кода и иллюстрирует плохое понимание того, как должна выглядеть структура углов. Лучшее место для обработки всплывающих окон будет в контроллере, так как это связано с представлением. – t0mm13b

+0

Я выполнял следующие инструкции: https://forum.ionicframework.com/t/ionicpopup-inside-a-factory/11787/4. Это лучше как завод? – methuselah

+1

@methuselah Зачем вам нужен «завод» или «сервис» в этом случае? '$ IonicPopup' и' $ ionicModal' уже просты в использовании, зачем их завершать в службе? Если вы хотите повторно использовать свои модальные и всплывающие окна, я предлагаю вам установить их в '$ rootScope', которые будут доступны в вашем приложении. – Eric

ответ

1

$ionicPopup поддерживает confirm(а ДА, НЕТ диалог) который не возвращает promise и в качестве аргумента передает результат. Вы можете использовать его как это:

$ionicPopup.confirm({ // example taken from official documentation 
    title: 'Consume Ice Cream', 
    template: 'Are you sure you want to eat this ice cream?' 
}).then(function (result) { 
    if (result) { 
    // At this point user confirmed that they want to eat the ice cream, 
    // so lets open a modal to visually show the user how the ice cream is being consumed 
    $ionicModal.fromTemplateUrl('my-modal.html', { 
     scope: $scope, 
     animation: 'slide-in-up' 
    }).then(function(modal) { 
     $scope.modal = modal; 
     $scope.modal.show(); 
     // This is where the user starts drooling :P 
    }); 
    } else { 
    // This user apparently hates ice cream, which is ridiculous... 
    } 
}); 

Вы можете получить более подробную информацию о official documentation page.


Интегрирование мой пример в код:

services.js

function PopupService($ionicPopup) { 
    function acceptAppointmentPopup(scope) { 
     return $ionicPopup.show({ 
      title: 'Are you sure you want to accept this appointment?', 
      scope: scope, 
      buttons: [{ 
       text: '<b>Yes</b>', 
       type: 'button-positive', 
       onTap: function(e) { 
        return true; 
       } 
      }, { 
       text: 'No', 
       onTap: function(e) { 
        return false; 
       } 
      }] 
     }) 
    } 

    return { 
     acceptAppointmentPopup: acceptAppointmentPopup 
    }; 
} 

controller.js

function BusinessPendingAcceptanceCtrl($scope, PopupService, ModalService) { 

    $scope.newMessageModal = function() { 
     ModalService.show('templates/modals/new-message.html', 'ConsumerNotificationsCtrl as vm'); 
    } 

    $scope.showAcceptAppointmentPopup = function() { 
     $scope.data = {} 
     var myPopup = PopupService.acceptAppointmentPopup($scope); 
     myPopup.then(function(res) { 
      if (res) { // Here we check if user pressed Yes - Yes button returns true 
       $scope.newMessageModal(); 
      } 
     }); 
    }; 
} 
+0

Спасибо за ответ. Как вы видели, я настроил '$ ionicPopup' как услугу, которую я вызываю из контроллера. Как интегрировать свой код в мой? – methuselah

+0

@methuselah См. Мое редактирование. – Eric

+0

Спасибо, я дам ему вихрь! – methuselah

Смежные вопросы