สิ่งที่ควรรู้
การพัฒนาโปรแกรมด้วย AngularJS Framework จะใช้โครงสร้างแบบ MVC
Controller คือ อะไร ?
ข้อมูลและฟังก์ชั่นต่างๆ จะถูกกำหนดไว้ใน Controller เพื่อให้ง่ายต่อการกำหนดขอบเขตของข้อมูลและฟังก์ชั่น
ลองเขียน Controller กันเถอะ
เราต้องการสร้างหน้าแสดงผลค่าของข้อมูลที่เอามาจาก Controller
1.สร้าง Controller เริ่มจากในไฟล์ js/app.js ทำการสร้าง Controller ชื่อ storeController โดยมีรายละเอียดดังนี้
(function () {
'use strict'
var app = angular.module('application', []);
app.controller('storeController', function () {
});
})();
2.กำหนดตัวแปรเก็บรายละเอียดข้อมูล ทำการกำหนดข้อมูลเพิ่มลงใน storeController โดยจะยกตัวอย่างเป็นข้อมูลซูชิหน้าปลามาคุโร่
app.controller('storeController', function () {
this.sushi = {
name: 'Maguro',
price: 200,
description: 'Fat tuna'
};
});
3.กำหนดขอบเขตของ directive ในการที่เราจะเรียกใช้ข้อมูลหรือฟังก์ชั่นต่างๆใน Controller
จะต้องทำการกำหนด Directive ที่ชื่อว่า ng-controller ในไฟล์ sushistore.html เพื่อระบุขอบเขตข้อมูล
ng-controller="ชื่อของ Controller as ชื่อเรียกในส่วนนี้(Alias)"
<body> <div class="list-group"> <div class="list-group-item" ng-controller="storeController as store"> <h1>Sushi's Name</h1> <h2>Sushi's Price<h2> <p>Sushi's Description<p> </div> </div> ...
จากนั้นใส่ข้อมูลซูชิลงไปให้ใส่ {{}} ครอบข้อมูลไว้ โดยการที่จะเข้าถึงข้อมูลนั้นเราต้องระบุ ชื่อตัวแปร
<body>
<div class="list-group">
<div class="list-group-item" ng-controller="storeController as store">
<h1>{{store.sushi.name}}</h1>
<h2>{{store.sushi.price}} yen<h2>
<p>{{store.sushi.description}}<p>
</div>
</div>
...
หากต้องการดูตัวอย่างให้เข้าลิงค์นี้ Demo
ตัวอย่างที่ผิด
ข้อมูลจะไม่สามารถใช้ได้หากประกาศภายนอกของ ng-controller อยู่
<body>
<div class="list-group">
<div class="list-group-item" ng-controller="storeController as store">
<h1>{{store.sushi.name}}</h1>
<h2>{{store.sushi.price}} yen</h2>
<p>{{store.sushi.description}}</p>
</div>
{{store.sushi.name}}
</div>
...
Challenge 2: The Best Sushi of Sushi Store
ในบรรดาซูชิทั้งหมดที่สุดของซูชิคือ ข้าวปั้นหน้ามาคุโร่ (Maguro)
ซึ่งคุณทานากะอยากให้ใส่เมนูนี้เป็นเมนูเด็ดประจำร้านของตัวเองจึงขอให้คุณทำเพิ่มซูชิให้
โดยคุณทานากะให้หน้าตาเว็บที่เขาอยากได้มีผลลัพธ์ดังลิงนี้ Demo
โดยมีโค้ดให้บางส่วน จงเติมส่วนที่ขาดหายไป เพื่อให้เว็บทำงานได้
ไฟล์ sushistore.html
<!DOCTYPE html>
<html ng-app="application">
<head>
<!-- bootstrap CSS -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<!-- bootstrap theme -->
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
</head>
<body>
<header>
<h1 class="text-center">{{"Tanaka-San"}}'s Sushi Store</h1>
<h2 class="text-center">Open Since {{10*200}}.</h2>
</header>
<div class="container">
<div class="row">
<div class="col-md-6">
<div class="list-group">
<div class="list-group-item">
<h1>Sushi Name</h1>
<h2>XXX yen</h2>
<p>Sushi Description</p>
</div>
</div>
</div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="js/lib/jquery.min.js"></script>
<!-- Bootstrap JavaScript -->
<script src="js/lib/bootstrap.min.js"></script>
<!-- AngularJS JavaScript -->
<script src="js/lib/angular.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
ไฟล์ app.js
(function () {
'use strict';
var app = angular.module('application', []);
app.controller('storeController', function () {
});
})();
