2

Я создаю почтовый ящик в угловом формате. И мне нужно будет сохранить черновик сообщения, когда всплывающее сообщение для отправки сообщения закрывается.mdDialog: поймать событие onClose

Я знаю, что есть несколько альтернатив:

scope.$on("$destroy", function() { saveMessage() }); 

и:

$mdDialog.show(...).finaly(function(){ saveMessage() }); 

Но оба являются недостаточными:

  • Первый вызывается, когда диалог уже закрыт. Это связано с неприемлемыми требованиями (есть iFrame, который должен быть открыт)
  • Вторая выходит за рамки контроллера mdDialog и несет ответственность за вызывающего абонента всплывающего окна, в то время как оно должно быть в самом всплывающем окне.

Итак, я ищу способ вызова функции ДО НАЧАЛА всплывающего окна. Нечто вроде scope.$on("$mdDialogBeforeClose", function() { saveMessage() });

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

Любые лучшие идеи?

Thx!

EDIT:

Добавка вопрос: Как поймать побег-событие нажатия клавиши? Я попытался <md-dialog aria-label="List dialog" ng-keypress="keyPress($event)">, но это даже не вызвало ...

ответ

4

Может использовать onRemoving обратный вызов - CodePen

Из документов:

enter image description here

Разметки

<div ng-controller="MyController as vm" id="popupContainer" ng-cloak="" ng-app="app"> 
    <md-button class="md-primary md-raised" ng-click="vm.open($event)"> 
     Custom Dialog 
    </md-button> 

    <script type="text/ng-template" id="test.html"> 
    <md-dialog aria-label="Test"> 
     Hello! 
    </md-dialog> 
    </script> 
</div> 

JS

angular.module('app',['ngMaterial', 'ngMessages', 'material.svgAssetsCache']) 

.controller('MyController', function($scope, $mdDialog) { 
    this.open = function(ev) { 
    $mdDialog.show(
     { 
     templateUrl: "test.html", 
     clickOutsideToClose: true, 
     onRemoving: function (event, removePromise) { 
      console.log(123); 
     } 
    }); 
    }; 
}) 
+0

Это имеет те же проблемы, что и во втором случае я описал. Мне нужно быть в контроллере модального. Мне нужно получить доступ к этой области, и я хотел бы, чтобы модальность была ответственна за сохранение сообщения на каждом закрытии (мы - команда разработчиков, и есть несколько мест, где открывается диалоговое окно) –

+0

@ThomasStubbe Демонстрация как закрыть диалог с помощью функции в диалоговом контроллере. Вы хотите закрыть диалоговое окно, щелкнув снаружи? –

+0

Демонстрация вообще не использует диалогового контроллера: 'диспетчер: SomeDialogController' должен быть добавлен в show-function. Внутри этого контроллера есть функция, которая должна быть выполнена до закрытия. –

1

Диалог вернуть обещание, используя которые вы можете обрабатывать диалоговое окно события закрыть

var dialogPromise = $mdDialog.show(
     { 
     templateUrl: "test.html", 
     clickOutsideToClose: true, 
     onRemoving: function (event, removePromise) { 
      console.log(123); 
     } 
    }); 

dialogPromise.then(function(){ 
    // hide method handler 
    // You can write your code here that execute after dialog close 
}, function(){ 

});