ionic 1.x版本中,有个$ionicPopup,用来弹出对话框,但是有个问题,连着弹出多个对话框将导致只有最前端的对话框可以调用close()关闭,后面的一系列对话框则再也关不掉。。。
官网的用法是这样的:
$ionicPopup.show({ cssClass:'er-popup', templateUrl: "templates/popup.html", scope: $scope });以上代码如果连续被执行将发生前面所说的问题。
可以通过自己定义service方法来弹出对话框解决这个问题。
.factory('popupService', [ '$ionicPopup', '$q', function ($ionicPopup, $q) { var firstDeferred = $q.defer(); firstDeferred.resolve(); var lastPopupPromise = firstDeferred.promise; //false 不关闭之前的popup就打开新的 ; true关闭之前的再打开 var closeAndOpen = true; return { 'show': function (method, object) { var deferred = $q.defer(); var closeMethod = null; deferred.promise.isOpen = false; deferred.promise.close = function () { if (deferred.promise.isOpen && angular.isFunction(closeMethod)) { closeMethod(); } }; if (closeAndOpen && lastPopupPromise.isOpen) { lastPopupPromise.close(); } lastPopupPromise.then(function () { deferred.promise.isOpen = true; var popupInstance = $ionicPopup[method](object); closeMethod = popupInstance.close; popupInstance.then(function (res) { deferred.promise.isOpen = false; deferred.resolve(res); }); }); lastPopupPromise = deferred.promise; return deferred.promise; } }; } ])然后这样来调用来弹出窗口:
popupService.show('show', { cssClass:'er-popup', templateUrl: "templates/popup.html", scope: $scope });这样就不会出现连续弹出的窗口关不掉的情况了。