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

Controller คือ อะไร ?

ข้อมูลและฟังก์ชั่นต่างๆ จะถูกกำหนดไว้ใน Controller เพื่อให้ง่ายต่อการกำหนดขอบเขตของข้อมูลและฟังก์ชั่น

เราต้องการสร้างหน้าแสดงผลค่าของข้อมูลที่เอามาจาก Controller

1.สร้าง Controller เริ่มจากในไฟล์ js/app.js ทำการสร้าง Controller ชื่อ storeController โดยมีรายละเอียดดังนี้

1
2
3
4
5
6
7
8
(function () {
    'use strict'
     
    var app = angular.module('application', []);
     
    app.controller('storeController', function () {
    });
})();

2.กำหนดตัวแปรเก็บรายละเอียดข้อมูล ทำการกำหนดข้อมูลเพิ่มลงใน storeController โดยจะยกตัวอย่างเป็นข้อมูลซูชิหน้าปลามาคุโร่

6
7
8
9
10
11
12
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)"
9
10
11
12
13
14
15
16
17
<body>
    <div class="list-group">                  <!-- ชื่อของ Controller as ชื่อเรียกในส่วนนี้(Alias)-->
        <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>
...

จากนั้นใส่ข้อมูลซูชิลงไปให้ใส่ {{}} ครอบข้อมูลไว้ โดยการที่จะเข้าถึงข้อมูลนั้นเราต้องระบุ ชื่อตัวแปร

9
10
11
12
13
14
15
16
17
<body>
    <div class="list-group">                  <!-- ชื่อของ Controller as ชื่อเรียกในส่วนนี้(Alias)-->
        <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 อยู่

9
10
11
12
13
14
15
16
17
18
<body>
    <div class="list-group">                  <!-- ชื่อของ Controller as ชื่อเรียกในส่วนนี้(Alias)-->
        <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}} <!-- ไม่สามารถใช้ได้เนื่องจากอยู่นอกขอบเขตของ storeController-->
    </div>
...

Challenge 2: The Best Sushi of Sushi Store

ในบรรดาซูชิทั้งหมดที่สุดของซูชิคือ ข้าวปั้นหน้ามาคุโร่ (Maguro)

ซึ่งคุณทานากะอยากให้ใส่เมนูนี้เป็นเมนูเด็ดประจำร้านของตัวเองจึงขอให้คุณทำเพิ่มซูชิให้

โดยคุณทานากะให้หน้าตาเว็บที่เขาอยากได้มีผลลัพธ์ดังลิงนี้ Demo

โดยมีโค้ดให้บางส่วน จงเติมส่วนที่ขาดหายไป เพื่อให้เว็บทำงานได้

ไฟล์ sushistore.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!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

1
2
3
4
5
6
7
8
9
(function () {
    'use strict';
     
    var app = angular.module('application', []);
    app.controller('storeController', function () {
 
    });
     
})();