เนื้อหาต่อเนื่องจากตอนที่ 1
เรียนรู้ ionicframework สร้าง hybrid mobile app ตอนที่ 1
https://www.ninenik.com/content.php?arti_id=521 via @ninenik
พูดคุย ก่อนเข้าเนื้อหา
เนื้อหาที่นำมาทำข้อมูล จะสังเกตว่าเป็นลักษณะของการทำตามตัวอย่าง
และเป็นการฝึกเขียน โดยเริ่มจาก 0 ของผู้เชียนเนื้อหาเอง คือกำลังศึกษาไปด้วย
เหตุผลที่ฝึกเขียนไปด้วยและ นำมาสร้างเนื้อไปด้วย เพราะต้องการย้ำความเข้าใจ
ของผู้เขียนเอง รวมทั้งแบ่งปัน เก็บเป็นข้อมูลไว้
โดยส่วนตัว ผู้เขียนเคยชอบที่จะอ่านและเข้าใจในสิ่งที่อ่าน แต่ไม่เคยลงมือทำ
ทำให้ไม่เกิดประสิทธิผล เช่น มองโค้ด ตามตัวอย่างต่างๆ อ่านไปเรื่อยๆ เข้าใจการทำงาน
แต่ไม่เคยลงมือทำ สุดท้ายก็คือว่างเปล่า ไม่ได้อะไรเลย ดังนั้น จึงย้ำว่า
สำหรับคนที่สนใจ ลองทำตาม หรือเรียนรู้ไปพร้อมกันได้ ยิ่งฝึกพิมพ์ จะยิ่งมอง
ภาพรวมออกง่ายขึ้น
เช้าเนื้อหา ต่อจากตอนที่ 1
ตัวอย่างผลลัพธ์ที่เราต้องการ แสดงตามด้านล่าง
ก่อนเริ่ม ขออธิบาย ส่วนของแท็ก สองส่วนนี้ในไฟล์ index.html จาก
ตอนที่ 1 คร่าวๆ ก่อน
- <html ng-app="myIonicApp"> ส่วนนี้กำหนด directive ng-app สำหรับใช้งาน angularjs
- <body ng-controller="myIonicHome"> ส่วนนี้สำหรับกำหนด directive ส่วนของจะจัดการ
เช่น เหตุการณ์ event การคลิก หรือการทำอะไรก็ตามในส่วนของ body ที่ angularjs เรียกใช้
หมายเหตุ สำหรับคนที่ไม่เข้าใจ หรือไม่รู้จัก angularjs สามารถศึกษาเพิ่มเติมในเว็บนี้ก็มี หรือ
ถ้าไม่ให้ การเรียนรู้ ionicframework สะดุด ก็ให้เข้าใจเพียงว่า มันคือ javascript ตัวหนึ่ง แค่นี้พอ
1. มาเริ่มต้นที่ส่วนแรก on-side-menus
ให้เข้าใจว่า ถ้าจะทำ mobile app ทีมี side muenus เราต้องใช้ โค้ด ต่อไปนี้
โดยโค้ดด้านล่าง ไม่ใช่แท็ก html ปกติ แต่เป็น directive ของ angurlarjs
ที่เราสามารถกำหนดรูปแบบเองได้ ซึ่งทาง ionicframework จะใช้แท็ก
<ion- ขึ้นต้นแบบนี้เป็น directive
รูปแบบแท็ก side menu แบบเต็ม จะมีแยก สามส่วนคือ ด้านซ้าย สำหรับ side menu ฝั่งซ้าย
ดรงกลาง สำหรับส่วนของเนื้อหา และ ด้านขวา สำหรับ side menu ด้านขวา
<ion-side-menus> <!-- Center content --> <ion-side-menu-content> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> </ion-side-menu> <!-- Right menu --> <ion-side-menu side="right"> </ion-side-menu> </ion-side-menus>
แต่ตัวอย่างเรา จะมีแค่สองส่วนคือ ด้านซ้าย และตรงกลาง ดังนั้นเราจะตัด ตัว ด้านขวาออก
มาวางในส่วนของ body ตามนี้เลย
<body ng-controller="myIonicHome"> <ion-side-menus> <!-- Center content --> <ion-side-menu-content> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> </ion-side-menu> </ion-side-menus> </body>
2. เราจะทำต่อในส่วนของ side menu ด้านซ้าย โดยจะเพิ่ม
header และ content เข้าไป
รูปแบบแท็กคือ header
<ion-header-bar> </ion-header-bar>
รูปแบบ content
<ion-content> </ion-content>
โดย content ในเมนูด้านซ้าย เราจะไม่เพิ่มอะไรเข้าไป
ส่วน header เราจะใส่หัวข้อเข้าไป และกำหนด สีสัน ด้วย css
ใช้ class="bar bar-header bar-positive"
โดยแทรกโค้ดตามนี้ เข้าไปใน side menu ด้านซ้าย
<!-- Left menu --> <ion-side-menu side="left"> <ion-header-bar class="bar bar-header bar-positive"> <h1 class="title">bar-positive</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu>
3. เพิ่มในส่วนของ ตรงกลาง คือใน side-menu-content
ทำแบบเดียวกับ side-menu left จะได้ตามโค้ดด้านล่าง
<!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar bar-header bar-positive"> <h1 class="title">bar-positive</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu-content>
4. เพิ่มปุ่ม สำหรับเรียกแสดง side-menu ด้านซ้ายด้วยโค้ด
<button menu-toggle="left" class="button button-icon icon ion-navicon"></button>
และเปลี่ยน title h1 ซักหน่อยเป็น My Home Ionic จะได้เป็น
<!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar bar-header bar-positive"> <button menu-toggle="left" class="button button-icon icon ion-navicon"></button> <h1 class="title">My Home Ionic</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu-content>
อธิบายเพิ่มตรงปุ่ม
menu-toggle="left" ให้เข้าใจว่า เป็นส่วนที่ใช้ซ่อน หรือแสดง side-menu
class="button button-icon icon ion-navicon" สำหรับส่วนนี้ก็จะเป็นการกำหนด css class
ในที่นี้จะเป็นปุ่มรูปเส้นขีดแนวนอน โดยใช้ชื่อ ion-navicon
ดูเพิ่มเติมชื่อได้ที่ http://ionicons.com/
ก่อนไปต่อใน เรามาดูหน้าตา การแสดงผลก่อน เรียกใช้งาน angularjs เพื่อ complie
แท็ก directive กับหลัง เรียกใช้งาน
ตัวอย่าง ก่อนเรียกใช้งาน angularjs
จากตัวอย่างด้านบน จะเห็นว่า เนื่องจากเรายังไม่ได้เรียกใช้การจัดการ app ด้วย angularjs
ก็จะแสดงไม่สมบูรณ์ ตามรุปแสดงเฉพาะส่วนของ side-menu ด้านซ้าย
ต่อที่ขั้นตอนที่ 5
5. เรียกใช้งาน angularjs เพื่อสร้าง module จาก directive ng-app
<html ng-app="myIonicApp">
โดยให้ไปแก้ไขที่ไฟล์ app.js
โค้ดไฟล์ app.js แบบมีคำอธิบาย
// สร้าง module ขึ้นมาชื่อ myIonicApp และเรียกใช้ ionic components angular.module('myIonicApp', ['ionic']) // อ้างอิงชื่อ module <html ng-app="myIonicApp"> // กำหนดกิจกรรม หรือการกระทำทั้งในส่วนควบคุม <body ng-controller="myIonicHome"> .controller('myIonicHome', function($scope) { // ส่งค่า scope เข้ามาใช้งาน // scope ก็คือ object ของ module มีลักษณะเลียนแบบตามรูปแบบของ DOM // หรือโครงส้ราง html });
โค้ดไฟล์ app.js
angular.module('myIonicApp', ['ionic']) .controller('myIonicHome', function($scope) { });
พอเรามีการเรียกใช้งาน javascirpt ทำให้ module ทำงาน ก็จะทำให้ side-menu และปุ่ม
กดซ่อนแสดง ท่ำงานได้ ตามตัวอย่างด้านล่าง
6. มาเพิ่มแท็บเมนูด้านล่าง ด้วยแท็กต่อไปนี้
<div class="tabs tabs-icon-top"> <a class="tab-item" href="#"> <i class="icon ion-home"></i> Home </a> <a class="tab-item" href="#"> <i class="icon ion-star"></i> Favorites </a> <a class="tab-item" href="#"> <i class="icon ion-gear-a"></i> Settings </a> </div>
โดยจะเพิ่มต่อแท็ก </ion-content> ที่แสดงตรงส่วนกลาง
อันนี้เราเพิ่มดูการแสดงผล ไม่ได้ต่อยอด ทำอะไรต่อในตอนนี้
ผลที่ได้
7. ส่วนสุดท้าย ลองทดสอบ การใช้งาน angularjs กับการแสดง checkbox
โดยจะไปเพิ่ม model data ในไฟล์ app.js
ให้กับ scope เป็นชุดของ ข้อมูล arrays ที่เป็น object อีกที
angular.module('myIonicApp', ['ionic']) .controller('myIonicHome', function($scope) { $scope.listItem=[ {listtext:'List number 1'}, {listtext:'List number 2'}, {listtext:'List number 3'}, {listtext:'List number 4'} ]; });
listItem จะเป็น model ที่จะถูกเรียกใช้
จากนั้นที่ไฟล์ index.html เราจะเพิ่มโค้ดต่อไปนี้เข้าไปใน ส่วน ion-content ส่วนกลาง
เป็นลิสรายการ checkbox ตามโค้ดด้านล่าง
<ion-content class="scroll-content ionic-scroll has-header"> <ul class="list"> <li class="item item-checkbox" ng-repeat="mylist in listItem"> <label class="checkbox"> <input type="checkbox"> </label> {{mylist.listtext}} </li> </ul> </ion-content>
โค้ดพร้อมคำอธิบาย
ำหนด class ให้กับ ion-content กรณี มี header--> <ion-content class="scroll-content ionic-scroll has-header"> <ul class="list"> <!-- มีการใช้ directive ของ angularjs เพื่อวนลูปแสดงข้อมูล ด้วย ngRepeat ใน html จะเขียนเป็น ng-repeat ใช้ ng-repeat="mylist in listItem" โดยนำค่า medel listItem มาวนลูปแสดง อ้างอิงด้วยชื่อ mylist --> <li class="item item-checkbox" ng-repeat="mylist in listItem"> <label class="checkbox"> <input type="checkbox"> </label> <!-- แสดงข้อความของ model --> {{mylist.listtext}} </li> </ul> </ion-content>
ตัวอย่าง เมื่อเสร็จแล้ว
ไฟล์ index.html ทั้งหมด
<!DOCTYPE html> <html ng-app="myIonicApp"> <head> <meta charset="utf-8" /> <!-- เบอร์โทรทีแสดง กำหนดให้เป็นลิ้งค์ และกดโทรได้ กรณี ios ในที่นี้ เป็น no--> <meta name="format-detection" content="telephone=no" /> <!-- กำหนดให้กดลิ้งค์ แล้วแสดง highlight ใน window phone ในที่นี้ เป็น no--> <meta name="msapplication-tap-highlight" content="no" /> <!-- กำหนด การแสดงผลสำหรับมือถือ รายละเอียด ค้นหาเพิ่มเติมได้--> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <!-- เรียกใช้ css ionic--> <link href="css/ionic.css" rel="stylesheet"> <!-- เรียกใช้งาน javascript ไฟล์นี้จะมีการรวมไปถึง angularjs ด้วย--> <script type="text/javascript" src="js/ionic.bundle.js"></script> <!-- ไฟล์ javascript ที่เราจะเขียนโค้ดเพิ่ม เพื่อใช้งาน --> <script type="text/javascript" src="app.js"></script> <title>MyIonicApp 1</title> </head> <body ng-controller="myIonicHome"> <ion-side-menus> <!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar bar-header bar-positive"> <button menu-toggle="left" class="button button-icon icon ion-navicon"></button> <h1 class="title">My Home Ionic</h1> </ion-header-bar> <!-- กำหนด class ให้กับ ion-content กรณี มี header--> <ion-content class="scroll-content ionic-scroll has-header"> <ul class="list"> <!-- มีการใช้ directive ของ angularjs เพื่อวนลูปแสดงข้อมูล ด้วย ngRepeat ใน html จะเขียนเป็น ng-repeat ใช้ ng-repeat="mylist in listItem" โดยนำค่า medel listItem มาวนลูปแสดง อ้างอิงด้วยชื่อ mylist --> <li class="item item-checkbox" ng-repeat="mylist in listItem"> <label class="checkbox"> <input type="checkbox"> </label> <!-- แสดงข้อความของ model --> {{mylist.listtext}} </li> </ul> </ion-content> <div class="tabs tabs-icon-top"> <a class="tab-item" href="#"> <i class="icon ion-home"></i> Home </a> <a class="tab-item" href="#"> <i class="icon ion-star"></i> Favorites </a> <a class="tab-item" href="#"> <i class="icon ion-gear-a"></i> Settings </a> </div> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> <ion-header-bar class="bar bar-header bar-positive"> <h1 class="title">bar-positive</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu> </ion-side-menus> </body> </html>
ไฟล์ app.js ทั้งหมด
angular.module('myIonicApp', ['ionic']) .controller('myIonicHome', function($scope) { $scope.listItem=[ {listtext:'List number 1'}, {listtext:'List number 2'}, {listtext:'List number 3'}, {listtext:'List number 4'} ]; });
ขอจบเท่านี้ รอติดตาม เนื้อหาเพิ่มเติมต่อไป