ในการใช้งาน mobile app หรือเว็บเพจทั่วไป เราจะเจอรูปแบบของ popup ต่างๆ
ที่แสดงขึ้นมาเพื่อให้แจ้งข้อมูล แจ้งเตือน หรือยืนยันการดำเนินการขั้นตอนต่อไปต่อ หรือแม้
แต่การรับข้อมูล เพื่อนำค่าไปดำเนินการต่อ อย่างรูปแบบที่เห็นบ่อยคือ
รูปแบบ alert
รูปแบบ confirm
รูปบบ prompt
ซึ่งส่วนใหญ่ถ้าในเว็บเพจทั่วไป ก็จะเป็นการใช้งาน javascript
ionic มีรูปแบบดังกล่าวนี้เช่นกัน
หมายเหตุ:: โค้ดและตัวอย่างที่นำมาแนะนำ จะมาจากเว็บไซต์
โดยจะมีการประยุกต์ดัดแปลง บ้างในบางส่วนเพื่อความเข้าใจ
โค้ดตัวอย่างและไฟล์ที่เกี่ยวข้อง จะขอใช้งานจากบทความก่อนหน้า ดูได้ที่
การใช้งาน ionicmodal ใน ionicframework ตอนที่ 10
https://www.ninenik.com/content.php?arti_id=560 via @ninenik
ในที่นี้ ให้ดูเฉพาะไฟล์ welcome.html และไฟล์ app.js
ไฟล์ welcome.html
<ion-header-bar class="bar bar-header bar-assertive">
<button menu-toggle="left" class="button button-icon icon ion-navicon"></button>
<h1 class="title">My Ionic</h1>
</ion-header-bar>
<!-- กำหนด class ให้กับ ion-content กรณี มี header-->
<ion-content class="scroll-content ionic-scroll has-header">
<div class="list card">
<div class="item item-body">
<h2>Welcome</h2>
<p>
This is welcome.html template
<br>
<br>
<br>
<div class="button-bar">
<a ng-click="showAlert()" class="button button-assertive">Alert</a>
<a ng-click="showConfirm()" class="button button-positive">Confirm</a>
<a ng-click="showPrompt()" class="button button-balanced">Prompt</a>
</div>
<br><br>
<div class="button-bar">
<a ng-click="showPopup()" class="button button-royal">MyPopup</a>
</div>
</p>
</div>
</div>
</ion-content>
ไฟล์ app.js
angular.module("myIonicApp", ["ionic"]) // สร้าง module และเรียกใช้งาน ionic
// ตั้งค่า provider สำหรับใช้งาน ngRoute service ใน ionic จะใช้ชื่อใหม่
// ต่างจาก angurlarjs แต่รูปแบบจะคล้ายๆ กัน
.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('intro', { // กำหนดชื่อ ว่าเราอยู่ในส่วนใหน (อธิบายเพิ่มทีหลัง) กำหนดอะไรก็ได้ที่ให้เราเข้าใจ
url: '/', // ถ้าลิ้งไปที่ url /
templateUrl: 'tpl/welcome.html', // ให้ไปเรียกไฟล์ welcome.html มาแสดง
controller: 'welcomeCtrl' // พร้อมสร้าง controller ชื่อ myIonicHome
})
.state('aboutus', { // อย่างอันนี้ กำหนดว่า state ชื่อ aboutus เหมือนสื่อเราอยู่หน้า about us
url: '/aboutus', // รูปแบบเคำอธิบายเหมือนด้านบน แค่เปลี่ยนชื่อ หรือค่า
templateUrl: 'tpl/aboutus.html', // รูปแบบเคำอธิบายเหมือนด้านบน แค่เปลี่ยนชื่อ หรือค่า
controller: 'aboutusCtrl'
})
.state('contactus', { // ในตอนนี้เข้าใจเพียงว่า กำหนดชื่อให้สัมพันธ์กับส่วนที่ใช้งาน ชื่ออะไรก็ได้
url: '/contactus',
templateUrl: 'tpl/contactus.html',
controller: 'contactusCtrl'
})
$urlRouterProvider.otherwise("/"); // กรณีอื่นๆ ให้ url อ้างอิง เท่ากับ / หรือหน้าแรก
})
// ส่วนจัดการ controller ต่างๆ มีการส่งค่า $ionicPopup เพื่อใช้งาน popup
.controller("welcomeCtrl",function($scope,$ionicPopup){
// การสร้างฟังก์ชั่น เรียกใช้งาน popup รูปแบบ alert
$scope.showAlert = function() {
// สร้าง popup object รุปแบบ alert
// เราสามารถ กำหนดไว้ในตัวแปรได้ เช่น
// var alertobj=$ionicPopup.alert({
// title: 'คำแนะนำ', // หัวข้อหลัก
// template: 'คุณเห็นข้อความนี้แล้ว' // template หรือข้อความที่ต้องการแสดง
// });
$ionicPopup.alert({
title: 'คำแนะนำ', // หัวข้อหลัก
template: 'คุณเห็นข้อความนี้แล้ว' // template หรือข้อความที่ต้องการแสดง
}).then(function(res) { // เมื่อปิด popup
// คำสั่งให้ทำงาน เมื่อปิด alert โดยการคลิกปุ่ม ok
console.log('ปิด alert แล้ว');
});
};
// การสร้างฟังก์ชั่น เรียกใช้งาน popup ในรูปแบบ confirm
$scope.showConfirm = function() {
// สร้าง popup object รุปแบบ confirm
$ionicPopup.confirm({
title: 'ยืนยันการลบ', // หัวข้อหลัก
template: 'คุณต้องการลบรายการนี้หรือใม่?' // template หรือข้อความที่ต้องการแสดง
}).then(function(res) { // เมื่อปิด popup กรณีเลือก ok หรือ cancel
// เงือนไขการทำงาน
if(res){ // ถ้าเลือก ok
// ทำงานตามคำสั่งที่กำหนด
console.log('คุณเลือก ok');
}else{ // ถ้าเลือก cancel
// ทำงานตามคำสั่งที่กำหนด
console.log('คุณเลือก cancel');
}
});
};
// การสร้างฟังก์ชั่น เรียกใช้งาน popup ในรูปแบบ prompt
$scope.showPrompt = function(){
// สร้าง popup object รุปแบบ prompt
$ionicPopup.prompt({
title: 'ยืนยันรหัสผ่าน', // หัวข้อหลัก
subTitle:'กรุณายืนยันรหัสผ่านอีกครั้ง', // หัวข้อย่อย
inputType: 'password', // รูปแบบ รnput รับค่า เป็น text หรือ pasword
inputPlaceholder: 'กรอกรหัสผ่าน' // ข้อความแสดงใน input
}).then(function(res) { // เมื่อปิด popup โดยคลิก ok หรือ cancel
// ทำงานตามคำสั่งที่กำหนด เมือปิด popup
// ถ้า เลือก ok ค่า res จะคือ ค่า input ที่กรอก สามารถเอาไปใช้งานต่อได้
console.log('รหัสผ่านของคุณคือ ', res);
});
};
// การสร้างฟังก์ชั่น เรียกใช้งาน popup แบบกำหนดเอง หรือ ในรูปแบบ show
$scope.showPopup = function() {
// กำหนดตัวแปร object เพื่อไว้รับค่า
$scope.data = {};
// กำหนดรูปแบบ การแสดง popup ในตัวอย่างเราจะแสดงให้กรอกข้อมูลสำหรับล็อกอิน
var str_template='<input type="text" placeholder="ชื่อผู้ใช้" ng-model="data.username"><br>';
str_template+='<input type="password" placeholder="รหัสผ่าน" ng-model="data.password">';
// สร้าง popup object รุปแบบ show
$ionicPopup.show({
template:str_template, // ใช้รูปแบบตามตัวแปรด้านบน
title: 'เข้าสู่ระบบ', // หัวข้อหลัก
subTitle: 'กรุณากรอกข้อมูลเพื่อเข้าสู่ระบบ', // หัวข้อย่อย
scope: $scope, // กำหนด scope child เพื่อใช้งานข้อมูลใน popup
buttons: [ // จัดรูปแบบปุ่ม
{ // กำหนดรูปแบบสำหรับปุ่ม cancel
text: 'ยกเลิก', // ข้อความปุ่ม
type: 'button-assertive' // รูปแบบ css class ของปุ่ม
},
{ // กำหนดรูปแบบสำหรับปุ่ม ok
text: '<b>เข้าสู่ระบบ</b>', // ข้อความปุ่ม
type: 'button-balanced', // รูปแบบ css class ของปุ่ม
onTap: function(e) { // กำหนดการทำงานเพิ่มเตืม ถ้ากด ok
// ตรวจสอบว่าได้กรอกข้อมูล username และ password หรือไม่
if (!$scope.data.username || !$scope.data.password) {
// ถ้าไม่ได้กรอก จะไม่สามารถทำอะไรได้ กดแล้วไม่มีผล
// และ popup จะยังไม่ปิด
e.preventDefault();
} else {
// หากกรอกข้อมูลครบ ส่งค่ากลับเป็น ตัวแปร object
return $scope.data;
}
}
},
]
}).then(function(res) { // เมื่อปิด popup โดยการกด ok หรือ cancel
// ส่งค่ากลับมาเป็น object ชื่อว่า res กรณีมีข้อมูล และกดปุ่ม ok
// กรณีกดปุ่มยกเลิก จะไม่มี ค่า res หรือเป็น undefined
if(res){ // ถ้ามีค่า res
$scope.data=res; // นำค่าที่ได้ไปเก็บในตัวแปร object ของ scope
console.log('ชื่อผู้ใช้!',$scope.data.username); // การเรียกใช้งานข้อมูล ชื่อผู้ใช้ได้จาก $scope.data.username
console.log('รหัสผ่าน!', $scope.data.password); // การเรียกใช้งานข้อมูล รหัสผ่านได้จาก $scope.data.password
}
});
};
})
.controller("aboutusCtrl",function($scope){
})
.controller("contactusCtrl",function($scope,$ionicPopup){
})
.controller("myIonicHome",function($scope){
});
ตัวอย่างการทำงาน
จากตัวอย่างและโค้ดข้างตัน นอกจากการใช้งาน method alert() confirm() prompt() แลัว
เรายังสามารถกำหนด popup แบบกำหนดเอง โดยใช้ method show()
โดยในตัวอย่างข้างต้น จะเป็นการประยุกต์ เพื่อแสดง popup สำหรับ login หรือเข้าสู่
ระบบอย่างง่าย
มาดู option ทั้งหมดของ method ทั้ง 4 รูปแบบข้างต้น เพิ่มต้ม
การใช้งาน method show() มี option กำหนดเพิ่มเติมดังนี้
{
title: '', // หัวข้อหลัก
subTitle: '', // หัวข้อย่อย (มีหรือไม่ก็ได้)
template: '', // ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
templateUrl: '', // url ไฟล์ ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
scope: null, // กำหนด scope child เพื่อใช้งานข้อมูลใน popup ใช้ null หรือ $scope (มีหรือไม่ก็ได้)
buttons: [ // จัดรูปแบบปุ่ม
{ // กำหนดรูปแบบสำหรับปุ่ม cancel
text: 'Cancel', // ข้อความปุ่ม
type: 'button-default', // รูปแบบ css class ของปุ่ม
onTap: function(e) { // กำหนดการทำงานเพิ่มเตืม ถ้ากดปุ่ม
// การใช้งาน e.preventDefault() จะทำให้การกดปุ่มใดๆ ไม่มีผล และ popup จะไม่ปิด
// e.preventDefault();
}
},{ // กำหนดรูปแบบสำหรับปุ่ม ok{
text: 'OK', // ข้อความปุ่ม
type: 'button-positive', // รูปแบบ css class ของปุ่ม
onTap: function(e) { // กำหนดการทำงานเพิ่มเตืม ถ้ากดปุ่ม
// คืนค่าข้อมูลกลับ กรณีมีการใช้งาน input text หรือมีการใช้งาน ข้อมูลผ่านการกำหนด $scope
return scope.data.response;
}
}
]
}
การใช้งาน method alert() มี option กำหนดเพิ่มเติมดังนี้
{
title: '', // หัวข้อหลัก
subTitle: '', // หัวข้อย่อย (มีหรือไม่ก็ได้)
template: '', // ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
templateUrl: '', // url ไฟล์ ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
okText: '', // ข้อความปุ่ม Ok (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'OK')
okType: '', // รูปแบบ css class ของปุ่ม Ok (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'button-positive')
}
การใช้งาน method confirm() มี option กำหนดเพิ่มเติมดังนี้
{
title: '', // หัวข้อหลัก
subTitle: '', // หัวข้อย่อย (มีหรือไม่ก็ได้)
template: '', // ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
templateUrl: '', // url ไฟล์ ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
cancelText: '', // ข้อความปุ่ม cancel (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'Cancel')
cancelType: '', // รูปแบบ css class ของปุ่ม cancel (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'button-default')
okText: '', // ข้อความปุ่ม Ok (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'OK')
okType: '', // รูปแบบ css class ของปุ่ม Ok (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'button-positive')
}
การใช้งาน method prompt() มี option กำหนดเพิ่มเติมดังนี้
{
title: '', // หัวข้อหลัก
subTitle: '', // หัวข้อย่อย (มีหรือไม่ก็ได้)
template: '', // ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
templateUrl: '', // url ไฟล์ ข้อความที่แสดงใน popup (มีหรือไม่ก็ได้)
inputType: // รูปแบบ input สำหรับรับข้อมูล เช่น text หรือ password (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'text')
inputPlaceholder: // ข้อความที่แสดงแนะนำใน input (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: '')
cancelText: // ข้อความปุ่ม cancel (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'Cancel')
cancelType: // รูปแบบ css class ของปุ่ม cancel (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'button-default')
okText: // ข้อความปุ่ม Ok (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'OK')
okType: // รูปแบบ css class ของปุ่ม Ok (ค่าเริ่มต้น หากไม่กำหนดจะเป็น: 'button-positive')
}