2016-04-02 4 views
0

Ich habe ein Angular-UI modal mit einer Form darin. Wenn der Benutzer das Kündigungs-Ereignis auslöst, möchte ich eine Bestätigung basierend auf $ dirty implementieren. Ich habe zahlreiche Quellen durchsucht, um Begriffe auf Promise zu finden und kann z. eine Warnung während der Abschlussveranstaltung. Allerdings kann ich nirgends finden, wie man das Modal tatsächlich zum Schließen bringt.Bestätigen Sie das modale Schließen des Winkels auf der schmutzigen Form

EDIT:

Mit dem aktuellen Code der Bestätigungsnachfrage oft (überraschenderweise nicht immer) erscheint nach dem modalen bereits entlassen wurde.

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 
    }); 
} 

Antwort

0

ich es feste $scope.$on verwenden, ausführliches Beispiel 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

Fügen Sie die $ scope.ok Methode und haken es zu den wichtigsten Absenden-Button des EditForm ng Sie auf

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); 
    }; 
} 

Injizieren Sie die $ scope.edeitForm. $ Schmutzig wie isDirty und verwenden, um den injizierten Wert, wie Sie

$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'); 
    }); 
} 
mögen

Hope this helfen Ihnen: D

+0

Vielen Dank für Ihre Antwort. Ich will es jedoch nicht nur mit einem Klick einrasten lassen, sondern auch den Back-Drop-Klick und die ESC-Taste abbrechen. Außerdem weiß ich immer noch nicht, wie man das Schließen des Modals stoppt, wenn der Benutzer Abbrechen auswählt. Kann ich 'preventDefault()' verwenden? –

+0

Warum stellen Sie keine Listener für diese Ereignisse ein und behandeln sie so, wie Sie möchten? – atefth

+0

könnten Sie etwas genauer sein? –

Verwandte Themen