網上提供的popup例子使用的是template,使用title、subtitle等參數來設置樣式,可是這樣在不少時候並不能知足咱們的需求的(ionic自帶樣式自己就醜),因此這時候能夠經過templateURL來寫出咱們想要的樣式。javascript
原樣式:css
自定義後的樣式(不敢說有多好看,可是至少仍是有點進步的):html
裏面編寫本身想要的內容與效果,因爲我這裏就一個標題和input框,因此代碼量較少。以下:java
<style> .popup-title{ padding-bottom: 10px; } </style> <div>請填寫快速按鈕標題</div> <input type="text" />
代碼爲:node
$scope.myPopup = $ionicPopup.show({ templateUrl: 'templates/sale/modal/popup.html', scope: $scope, buttons: [{ //Array[Object] (可選)。放在彈窗footer內的按鈕。 text: '取消', type: 'sale-cancel', onTap: function(e) { $scope.myPopup.close(); } }, { text: '肯定', type: 'sale-sure', onTap: function(e) { console.log(e) } }] });
能夠看到,button裏的內容也是能夠自定義的,type對應的就是button的樣式class,因此這裏須要編寫一個css文件,我修改了一下popup的border-radius,這個是須要覆蓋源碼的,請知悉。代碼以下:app
.popup-container .popup { border-radius: 8px; } .popup-buttons { padding: 0; min-height: auto; } .sale-cancel { border-bottom-left-radius: 8px!important; margin-right: 0!important; } .sale-sure { border-bottom-right-radius: 8px!important; background-color: #EABA82; color: white!important; }
注:使用!important的目的是使其樣式優先級最高,而且在狀態爲active時不改變對應的樣式。dom
在我我的的操做習慣來講,彈起這個彈窗的時候,若是我想取消本次彈窗,我是想點擊這個彈窗的外部就能夠取消,而不是說非要點擊那個取消按鈕,而且如今有不少的大屏手機,通常單手操做的話是不容易點擊到取消的。ionic
可是在ionic的popup組件中是沒有這樣的效果的,因此咱們須要本身去實現這個效果,這裏使用directive來實現。spa
var saleDrective = angular.module('saleDrective', ['saleDrective.directives']);
angular.module('saleDrective.directives', []) .directive('rjCloseBackDrop', [function() { return { scope: false, restrict: 'A', replace: false, link: function($scope, iElm, iAttrs, controller) { var htmlEl = angular.element(document.querySelector('html')); htmlEl.on("click", function(event) { if (event.target.nodeName === "HTML" & $scope.myPopup) { $scope.myPopup.close(); } }); } }; }])
這裏的module名字須要與app.js定義的保持一致。Directive是直接操做dom的,判斷當前popup爲顯示狀態時(即下面的if語句,$scope.myPopup是在controller中定義popup名字,在上面代碼中有寫出來)點擊外圍backdrop即close當前popup。rest
在使用到這個popup對應的頁面中的content上加入rj-close-back-drop如:
如今就大功告成了,但願對你們有幫助。