2015-10-29 4 views
1

У меня есть функция, в которой я собираю свой диалог с милым предупреждением. Я хочу использовать его во многих местах и, следовательно, установить, что в функции как:Ответ от диалогового окна подтверждения Sweet-alert

$rootScope.giveConfirmDialog = function(title,text,confirmButtonText,toBeExecFunction){ 
     swal({title: title, 
     text: title, 
     ..... 
     confirmButtonText: confirmButtonText }, 
     toBeExecFunction); 
    } 

Что я хочу сделать, это просто: вызов этой функции в где-нибудь и пойти на на основе ответа пользователя, таким образом:

var res = $scope.$root.giveConfirmDialog("..", 
       "test", "test", function() { 
       return true; 
      }); 

Но я не принимаю никакого ответа. На самом деле, я не мог найти такой пример, и я думаю, что это не обычный способ использования. Но как это возможно?

ответ

4

Похоже, вы хотите различного поведения, исходя из того, что пользователь нажимает кнопку подтверждения или кнопку отмены.

SweetAlert предоставляет пользователю ответ через параметр функции обратного вызова.

Вот пример прямо формирует SweetAlert Docs:

swal({ 
     title: "Are you sure?", 
     text: "You will not be able to recover this imaginary file!", 
     type: "warning", 
     showCancelButton: true, 
     confirmButtonColor: "#DD6B55", 
     confirmButtonText: "Yes, delete it!", 
     cancelButtonText: "No, cancel plx!", 
     closeOnConfirm: false, 
     closeOnCancel: false 
    }, 
    function(isConfirm) { 
     if (isConfirm) { 
      swal("Deleted!", "Your imaginary file has been deleted.", "success"); 
     } else { 
      swal("Cancelled", "Your imaginary file is safe :)", "error"); 
     } 
    } 
); 

В этом примере, при нажатии кнопки подтверждения, новый SweetAlert открыт, подтвердив свое действие, и если кнопка отмены нажат, новый SweetAlert открывается, отмечая, что действие было отменено. Вы можете заменить эти вызовы любой функциональностью, в которой вы нуждаетесь.

Поскольку эта библиотека использует асинхронные обратные вызовы, не существует возвращаемого значения из метода swal.

Кроме того, было бы неплохо использовать библиотеку, такую ​​как ng-sweet-alert, чтобы обернуть призывы к сладому предупреждению, чтобы гарантировать, что любые изменения, которые вы делаете в обратных вызовах Sweet Alert, должным образом подхвачены угловым жизненным циклом. Если вы посмотрите источник для ng-sweet-alert, вы увидите, что автор обертывает вызовы на swal и обратный вызов пользователя в $rootScope.$evalAsync, гарантируя, что угловые обновления при завершении вызовов и обратных вызовов.

С точки зрения стиля кода было бы лучше поместить вашу логику в сервис или фабрику для повторного использования на всей вашей кодовой базе, а не просто привязать ее к $ rootScope.

+0

я пытаюсь 'вернуть isCofirm' внутри swal, но он не работает ' swal ({ название: "вы уверены?", текст: "вы не сможете восстановить этот мнимый файл!", типа: "предупреждение", showCancelButton: правда, confirmButtonColor: "# DD6B55", confirmButtonText: " Да, удалите его! », cancelButtonText:« Нет, отмените PLX», closeOnConfirm: ложь, closeOnCancel: ложь }, функция (isConfirm) { возвращение isConfirm } );' Можете ли вы предложить какие-либо изменения здесь – ubm

+0

@ubm Ваш комментарий неясна. Похоже, вы можете просто не понимать, как обращаться с асинхронным обратным вызовом. Возможно, вам захочется открыть новый вопрос с дополнительной информацией, если вы все еще боретесь. Короче говоря, все, что вы хотите сделать, когда оповещение подтверждено, должно находиться внутри вашей функции обратного вызова.Прямо сейчас функция обратного вызова возвращает логическое значение. Это ничего не делает, потому что вы возвращаете его во внутренний код сладости, который не знает или не заботится о вашем возвращаемом значении. 'swal' не возвращает значение. Ваш обратный вызов не должен возвращать значение. Просто выполняйте работу в обратном вызове. –

0

вы не получите ответ, как это асинхронная, вы можете использовать следующий фрагмент кода

swal({ 
    title: "Are You Sure?", 
    text: "Are you sure to go ahead with this change?", 
    type: "warning", 
    showCancelButton: true, 
    confirmButtonColor: "#DD6B55", 
    confirmButtonText: "Yes", 
    cancelButtonText: "No", 
    closeOnConfirm: true, 
    closeOnCancel: true, 
    }, 
    function(isConfirm){ 
    if (isConfirm) { 
     $.ajax({ 
     url:"/path", 
     method:"GET", 
     data: { 
      category_id: category_id, 
     }, 
     success:function(response) { 
      // tasks on reponse 
     } 
     }) 
Смежные вопросы