2

我使用角度創建郵箱。當發送消息的彈出窗口關閉時,我需要保存草稿消息。mdDialog:捕獲onClose事件

我知道有一些替代方案:

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

和:

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

但這兩者都不足以:

  • 首當對話框已關閉時調用。這是由於要求不可接受的(有一個需要打開的iFrame)
  • 第二個超出了mdDialog控制器的範圍,並將責任賦予彈出窗口的調用者,而它應該在彈出窗口本身。

所以我正在尋找方式來調用一個函數之前彈出實際上關閉。 類似於scope.$on("$mdDialogBeforeClose", function() { saveMessage() });

另一種選擇是鉤住每一個關閉事件。看起來很醜,但可能是解決方案。在這種情況下,我需要聽取逃生按鈕並在彈出窗口外單擊(Altough,我可能會禁用該功能)...

有沒有更好的想法?

Thx!

編輯

的另外一個問題:如何捕捉逃逸,按鍵事件?我試圖<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(){ 

});