2016-04-02 2 views
0

У меня есть мода с угловым UI с формой. Когда пользователь запускает событие отклонения, я хочу реализовать подтверждение на основе $ dirty. Я искал в многочисленных источниках, чтобы найти понятия на Promise и может успешно получить, например. предупреждение во время закрытия события. Тем не менее, я не могу найти нигде, как фактически остановить модальное от закрытия.Подтверждение углового модального закрытия на грязной форме

EDIT:

С текущего кода подтверждения предупреждения часто (на удивление не всегда) появляется после того, как модальный уже уволен.

var editResourceModalController = function($scope, $uibModalInstance) { 

    $uibModalInstance.result.catch(function() { 
     if ($scope.editForm.$dirty) { 
      window.confirm("close modal?"); 
     } 
     $uibModalInstance.dismiss('cancel'); 
    }); 

} 

var uibModalInstance; 
$scope.openEditModal = function() { 
    uibModalInstance = $uibModal.open({ 
     animation: true, 
     templateUrl: "edit.html", 
     controller: editResourceModalController 
    }); 
} 

ответ

0

Я установил его с помощью $scope.$on, обширного примеру here

var editResourceModalController = function($scope, $uibModalInstance) { 

    $scope.close = function() { 
     $uibModalInstance.close(); 
    } 

    $scope.$on('modal.closing', function(event) { 
     if ($scope.editForm.$dirty) { 
      if (!confirm("U sure bwah?")) { 
       event.preventDefault(); 
      } 
     } 

    }); 
} 

var uibModalInstance; 
$scope.openEditModal = function(editItem, hierarchy, selectedFolder) { 
    uibModalInstance = $uibModal.open({ 
     animation: true, 
     templateUrl: "edit.html", 
     controller: editResourceModalController   
    }); 
} 
0

Добавить метод $ scope.ok и повесьте его на кнопку по editForm Передать в нг нажмите

var editResourceModalController = function($scope, editItem, hierarchy, selectedFolder) { 
    $scope.form = {}; 
    $scope.editItem = editItem; 
    $scope.editListItems = []; 
    $scope.listItems = 0; 
    $scope.getNumber = function(n) { 
     return new Array(n); 
    } 
    $scope.hierarchy = hierarchy; 
    $scope.selectedFolder = selectedFolder; 
    $scope.editModel = { 
     name: $scope.editItem.name, 
     description: $scope.editItem.description, 
     hierarchyId: $scope.selectedFolder 
    } 
    $scope.ok = function() { 
     editItem.close($scope.editForm.$dirty); 
    }; 
} 

Инжектируйте $ scope.edeitForm. $ Грязный, как и isDirty используйте введенное значение как угодно

$scope.openEditModal = function(editItem, hierarchy, selectedFolder) { 
    $scope.modalInstance = $uibModal.open({ 
     animation: true, 
     templateUrl: "edit.html", 
     controller: ["$scope", "editItem", "hierarchy", "selectedFolder", editResourceModalController], 
     resolve: { 
      editItem: function() { 
       return editItem; 
      }, 
      hierarchy: function() { 
       return hierarchy; 
      }, 
      selectedFolder: function() { 
       return selectedFolder; 
      } 
     } 
    }); 

    $scope.modalInstance.result.catch(function(isDirty) { 
     if (isDirty) { 
      // confirmation code here 

     }else{ 
      // other logic 
     } 
     // dismiss the modal 
     editItem.dismiss('cancel'); 
    }); 
} 

Надеется, что это помогло вам: D

+0

Спасибо за ваш ответ. Тем не менее, я не хочу подключать его только к нажатию кнопки, я хочу поймать щелчок назад и кнопку ESC, чтобы отменить события. Более того, я до сих пор не знаю, как остановить модальное от фактического закрытия, если пользователь отменит отмену. Могу ли я использовать 'preventDefault()'? –

+0

Почему вы не устанавливаете слушателей для этих событий и не обрабатываете их так, как хотите? – atefth

+0

не могли бы вы быть более конкретными? –

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