Есть ли способ объединить угловое подтверждение js и сладкое предупреждение (swal)

В моем текущем проекте для выхода из системы я хочу добавить подтверждение. Для подтверждения я хочу сладкое оповещение. Я нашел решение для подтверждения и сладкого оповещения отдельно, но мне трудно совместить эти два. HTML:

<a href="javascript:void(0);" ng-click="Logout()"><i class="fa fa-sign-out" aria-hidden="true"></i> Logout</a>

js:

app.controller('LogoutCtrl', ['$scope', '$location', 'localStorageService', function($scope, $location, localStorageService) {
    $scope.Logout = function() {
        swal({
                title: "Are you sure to logout?",
                text: "",
                type: "warning",
                showCancelButton: true,
                confirmButtonColor: '#DD6B55',
                confirmButtonText: 'Yes',
                cancelButtonText: "No",
                closeOnConfirm: false,
                closeOnCancel: false
            },
            function(isConfirm) {
                if (isConfirm) {
                    localStorageService.clearAll();
        $location.path('/login');

                }
            });
    }
}]);

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

Код в действии


person samjhana joshi    schedule 23.08.2016    source источник
comment
это то, что вам нужно github.com/oitozero/ngSweetAlert   -  person Vanojx1    schedule 23.08.2016
comment
@Vanojx1 .. Да, он у меня есть. Моя проблема в том, что я не могу связать это сладкое оповещение с подтверждением выхода из системы. Когда пользователь нажимает кнопку «Выход», я хочу, чтобы всплывающее окно подтверждало всплывающее окно, и только при подтверждении выхода из системы.   -  person samjhana joshi    schedule 23.08.2016
comment
попробуйте добавить $scope.$apply() после $location.path('/login').   -  person ziaulain    schedule 23.08.2016
comment
@ziaulain ... это не входит в функцию isConfirm.   -  person samjhana joshi    schedule 23.08.2016


Ответы (2)


может быть функция внутри другой функции в javascript

function(){
       function abc(){
       }


       //use abc() as much as you want               
}
person jayanthCoder    schedule 23.08.2016
comment
Я не могу понять ваше заявление о проблеме ... не могли бы вы быть более конкретным - person jayanthCoder; 23.08.2016
comment
Да, я знаю, что внутри функции не может быть другой функции. Я ищу обходной путь для этого. - person samjhana joshi; 23.08.2016
comment
Я использую то же самое. Проблема в том, что я не могу получить предупреждение angular и swal для работы с подтверждением. Когда пользователь нажимает кнопку «Выход», я хочу, чтобы в качестве подтверждения отображалось предупреждение. Только пользователь подтверждает, а затем пользователь выходит из системы. Проблема с моей работой в том, что внутри функции не может быть функции. - person samjhana joshi; 23.08.2016

У вас есть особый случай, когда вы вносите изменения в путь location, не сообщая angular, что что-то изменилось, в конечном итоге цикл дайджеста не срабатывает. Вы должны запускать цикл дайджеста вручную для внесения location изменений для понимания угловым маршрутизатором. Для запуска цикла дайджеста вы можете использовать $timeout (ввести внутри контроллера перед его использованием)

var ctrl = function($scope, $location,$timeout) {

  swal({
      title: "Are you sure to logout?",
      text: "",
      type: "warning",
      showCancelButton: true,
      confirmButtonColor: '#DD6B55',
      confirmButtonText: 'Yes',
      cancelButtonText: "No",
      closeOnConfirm: true, //it should be true to close popup on confirm
      closeOnCancel: true  //it should be true to close popup on cancel
    },
    function(isConfirm) {
      if (isConfirm) {
        $timeout(function(){
          localStorageService.clearAll();
          $location.path('/login');          
        });
      }
    });
}

Код в действии


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

person Pankaj Parkar    schedule 23.08.2016
comment
...есть функция внутри функции. Это будет работать ? - person samjhana joshi; 23.08.2016
comment
@samjhanajoshi Функция, которая есть в swal`, является функцией обратного вызова, передается плагину swal, 1-я - это успешный обратный вызов (вызывается в порядке), 2-я отменяет обратный вызов, он должен работать - person Pankaj Parkar; 23.08.2016
comment
хорошо, я понимаю вас сейчас .. но это не работает. Даже если я нажму «Да» или «Нет», он не войдет в функцию isConfirm. - person samjhana joshi; 23.08.2016
comment
@samjhanajoshi посмотрите на обновленный ответ, было бы полезнее, если бы я добавил plunkr, который делает то же самое, что и вы. - person Pankaj Parkar; 23.08.2016
comment
Можете ли вы заглянуть в мой плункер? Он не входит в функцию IsConfirm. - person samjhana joshi; 23.08.2016
comment
@samjhanajoshi, потому что вы не настроили маршрут входа в свой пример .. проверьте мой plunkr - person Pankaj Parkar; 23.08.2016
comment
Давайте продолжим обсуждение в чате. - person samjhana joshi; 23.08.2016
comment
@samjhanajoshi ты смотрел? тебе это помогло? - person Pankaj Parkar; 24.08.2016
comment
Нет, не работает... функция isConfirm не работает. - person samjhana joshi; 25.08.2016
comment
Почему бы вам не сравнить свой код с plunkr .. я думаю, вы что-то пропустили - person Pankaj Parkar; 25.08.2016