
การใช้ AngularJS สร้าง Web Application แบบ MVC โดยใช้ View และ Controller เบื้องต้นให้เรียก JSON ส่วนของ Web Service มาแสดงบน ng-repeat สำหรับผู้เริ่มต้น
บทเรียนให้ศึกษาก่อนหน้านี้ สำหรับ AngularJS
- การเขียน Single Page Application ด้วย AngularJS
- AngularJS กับการวนซ้ำข้อมูลด้วย ng-repeat และกรองด้วย Filter
- AngularJS การแยก Controller และทำงานร่วมกับ Table
บทเรียนนี้ก็เลยจะเป็นการทำงานร่วมกับ MySQL และ PHP ครับด้วย JSON Web Service โดยการ Encode และ Decode ออกมาใช้งานกับ AngularJS
สร้าง MySQL Database ขึ้นมาครับ แล้ว Create Database ดังนี้
CREATE TABLE `driver` ( `id` int(10) NOT NULL auto_increment, `first_name` varchar(255) character set utf8 default NULL, `last_name` varchar(255) character set utf8 default NULL, `tel` varchar(255) collate utf8_bin NOT NULL, `TruckNo` varchar(255) collate utf8_bin default NULL, `TruckPV` varchar(255) collate utf8_bin default NULL, PRIMARY KEY (`id`) );
เสร็จแล้วก็ใส่ ข้อมูลลงไปเป็นตัวอย่างเล็กน้อยครับ
เปิด Appserv? หรือ XAMPP ขึ้นมาครับสร้าง โฟลเดอร์ว่า api ขึ้นมาแล้วเขียน PHP ใหม่ว่า listdriver.php เป็นการเรียก Method ชื่อ listdriver() นั่นเอง
<?php
include"db.php";
$strSQL = "SELECT * FROM driver";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
while($objResult = mysql_fetch_array($objQuery))
{
$drivers[] = array(
'id' => $objResult['id'],
'first_name' => $objResult['first_name'],
'last_name' => $objResult['last_name'],
'tel' => $objResult['tel'],
'TruckNo' => $objResult['TruckNo'],
'TruckPV' => $objResult['TruckPV']
);
}
header("content-type:text/javascript;charset=utf-8");
header("Content-Type: application/json; charset=utf-8", true, 200);
print json_encode(array("success" => true,"drivers"=>$drivers));
mysql_close($objConnect);
?>
เพื่อให้การทำงาน Cross Domain ได้เราต้องเพิ่มส่วนนี้ลงไปใน header() ครับ
header("Access-Control-Allow-Origin: *");
ภาพรวมไฟล์ listdriver.php จะเป็นแบบนี้ครับ
<?php
include"db.php";
$strSQL = "SELECT * FROM driver";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
while($objResult = mysql_fetch_array($objQuery))
{
$drivers[] = array(
'id' => $objResult['id'],
'first_name' => $objResult['first_name'],
'last_name' => $objResult['last_name'],
'tel' => $objResult['tel'],
'TruckNo' => $objResult['TruckNo'],
'TruckPV' => $objResult['TruckPV']
);
}
header("Access-Control-Allow-Origin: *");
header("content-type:text/javascript;charset=utf-8");
header("Content-Type: application/json; charset=utf-8", true, 200);
print json_encode(array("success" => true,"drivers"=>$drivers));
mysql_close($objConnect);
?>
ทดสอบ Web Service ของเรากันหน่อย
กลับมาสร้าง ไฟล์ index.html ครับ ให้สร้างไฟล์ตามนี้ครับ
<!doctype html>
<html ng-app="indexApp">
<head>
<meta charset="UTF-8">
<title>AngularJS</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<script src="js/angular.min.js"></script>
</head>
<body>
<div class="container" ng-controller="indexController">
<ul class="nav nav-pills" role="tablist">
<li role="presentation" class="active"><a href="#">Home</a></li>
<li role="presentation"><a href="register.html">Register</a></li>
<li role="presentation"><a href="#job">Jobs Report</a></li>
</ul>
<h3>Driver List</h3>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Search: </h3>
</div>
<div class="panel-body">
<input class="form-control" ng-model="searchText"/>
</div>
</div>
</div>
<script src="controller/index.js"></script>
</body>
</html>
สังเกตุจะเห็นว่าเราตั้งชื่อ ng-app ว่า indexApp และตั้งชื่อ ng-controller ว่า indexController ไว้เตรียมพร้อมสำหรับ AngularJS ครับ และถ้ามองดีๆ ให้เราเตรียม Controller ของเราโดยสร้าง folder ชื่อ “controller” ก่อนแล้วสร้างไฟล์มาใหม่ว่า index.js เก็บไว้ใน controller นั้นครับ โดยมี Code ดังนี้
angular.module('indexApp', [])
.controller('indexController', function($scope, $http, $location, $window) {
$http.get("http://localhost/AngularJS/api/listdriver.php")
.success(function (response) {$scope.driver = response.drivers;});
});
โดยจะเป็นการเรียก Key ที่อยู่ใน JSON ทั้งหมดมาเก็บลงใน $scope ของ driver ครับ สังเกตุว่า Key ที่เรียกผ่าน response นั้นชื่อ drivers ใน JSON ครับ
เราเลยต้องมาเขียนร่วมกับ Table ทันทีครับ
<table class="table table-striped">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Telephone</th>
<th>Truck Number</th>
<th>Truck Province</th>
<th></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="user in driver | filter:searchText">
<td>{{user.first_name}}</td>
<td>{{user.last_name}}</td>
<td>{{user.tel}}</td>
<td>{{user.TruckNo}}</td>
<td>{{user.TruckPV}}</td>
<td></td>
</tr>
</tbody>
</table>
ทดสอบครับ
จะเห็นว่าทำงานได้เรียบร้อยแล้ว บทเรียนต่อไปจะเป็นการสร้าง Register สำหรับกรอกข้อมูลใหม่เพื่อนำเข้า Insert ใน MySQL ร่วมกับ PHP (Post Method) ครับ







