การพัฒนาโปรแกรมด้วย AngularJS Framework จะใช้โครงสร้างแบบ MVC

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 () {

	});
	
})();