:: Kunagorn Sirikup :: C# Developer

21/8/56

AngularJS สร้่าง List รายการ


เริ่มต้นโดย refernce script ของ AngularJS ลงไปในส่วน <head> สามารถทำได้ 2 วิธี คือ
1. ดาวน์โหลดจาก http://angularjs.org/
2. อ้างอิงจาก CDN 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>

ในตัวอย่างนี้ผมจะทำการ referece AngularJS ดังนี้ครับ

<!DOCTYPE html>
<html ng-app>
<head runat="server">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
</head>
<body>


</body>
</html>

จะสังเกตว่าที่ tag html มีการเพิ่ม attribute ชือ ng-app เพื่อเป็นการกำหนดว่าเพจมีการใช้ AngularJS  ต่อมาผมจะสร้าง Controller ขึ้นมาเพื่อควบคุมการทำงานต่างๆ โดยจะเริ่มกำหนด Datasource ให้กับ Model ก่อน ดังนี้

<script>
    function CourseController($scope) {
        $scope.courses = [
            { ischeck: true, coursename: 'IT201' },
            { ischeck: false, coursename: 'EN101' },
            { ischeck: false, coursename: 'FA201' }
        ];
    }
</script>

ที่นี้เราจะลองนำค่าจาก Model มาแสดงบนหน้าจอกันดูนะครับ โดยสร้าง div ขึ้นมาแล้วกำหนดชื่อ Controller ตาม script ข้างบน 

<div ng-controller="CourseController">
    <h3>Course List</h3>
    <ul>
        <li ng-repeat="course in courses" style=" list-style: none;">
            <input type="checkbox" ng-model="course.ischeck"/>
            <span>{{course.coursename}}</span>
        </li>
    </ul>
</div>

ทดสอบ Run จะได้ผลลัพธ์ ดังนี้










ต่อมาผมจะมาเพิ่มในส่วนของการเพิ่มข้อมูลลงกันบ้างนะครับ โดยเพิ่ม Textbox และปุ่ม Add ใน Code นี้มีจุดที่น่าสนใจอยู่ 2 ที่ 
- TextBox จะมี attribute ng-model="courseText" ซึ่งเป็นค่าที่เราจะส่งไปให้ Model เพื่อเตรียมทำการบันทึก 
- Button จะมี attribute  ngsubmit="addCourse()" หมายถึงว่าเมื่อมีการ Submit แล้วจะมีการ Request ในรูปแบบของ AjaxRequest

<div ng-controller="CourseController">
    <h3>Course List</h3>
    <form ng-submit="addCourse()">
        <input type="text" ng-model="courseText"  size="30"
                placeholder="add new todo here">
        <input class="btn-primary" type="submit" value="add">
    </form>
    <ul>
        <li ng-repeat="course in courses" style=" list-style: none;">
            <input type="checkbox" ng-model="course.ischeck"/>
            <span>{{course.coursename}}</span>
        </li>
    </ul>
</div>

หลังจากนั้นให้เพิ่ม function addCourse เพื่อใช้สำหรับเพิ่มข้อมูล

<script>
    function CourseController($scope) {
        $scope.courses = [
            { ischeck: true, coursename: 'IT201' },
            { ischeck: false, coursename: 'EN101' },
            { ischeck: false, coursename: 'FA201' }
        ];

        $scope.addCourse = function () {
            $scope.courses.push({ ischeck: false, coursename: $scope.courseText });
            $scope.courseText = '';
        };
    }
</script>

ทดสอบ Run จะได้ผลลัพธ์ ดังนี้




















ต่อมาผมจะมาเพิ่มในส่วนของการแสดงจำนวนรายการที่เลือก และจำนวนรายการทั้งหมด  ตาม Code นี้

<div ng-controller="CourseController">
    <h3>Course List</h3>
    <span>{{remaining()}} of {{courses.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ]
    <form ng-submit="addCourse()">
        <input type="text" ng-model="courseText"  size="30"
                placeholder="add new todo here">
        <input class="btn-primary" type="submit" value="add">
    </form>
    <ul>
        <li ng-repeat="course in courses" style=" list-style: none;">
            <input type="checkbox" ng-model="course.ischeck"/>
            <span>{{course.coursename}}</span>
        </li>
    </ul>
</div>

จะสังเกตว่าผมได้สร้าง function remaining เพื่อแสดงจำนวนรายการที่เลือก และ function archive เพื้อเคลียร์รายการทั้งหมด ดังนี้

<span>{{remaining()}} of {{courses.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ]

หลังจากทดสอบได้ผลลัพธ์ ดังนี้








ีั












สรุป Code ทั้งหมดของตัวอย่างนี้

<!DOCTYPE html>
<html ng-app>
<head runat="server">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
</head>
<body>

    <style>
        body {
            font-family: 'Century Gothic', Arial,'sans-serif';
             font-size:13px;
        }
    </style>
<div ng-controller="CourseController">
    <h3>Course List</h3>
    <span>{{remaining()}} of {{courses.length}} remaining</span> [ <a href="" ng-click="archive()">archive</a> ]<br /><br />
    <form ng-submit="addCourse()">
        <input type="text" ng-model="courseText"  size="30"
                placeholder="add new todo here">
        <input class="btn-primary" type="submit" value="add">
    </form>
    <ul>
        <li ng-repeat="course in courses" style=" list-style: none;">
            <input type="checkbox" ng-model="course.ischeck"/>
            <span>{{course.coursename}}</span>
        </li>
    </ul>
</div>
   
<script>
    function CourseController($scope) {
        $scope.courses = [
            { ischeck: true, coursename: 'IT201' },
            { ischeck: false, coursename: 'EN101' },
            { ischeck: false, coursename: 'FA201' }
        ];

        $scope.addCourse = function () {
            $scope.courses.push({ ischeck: false, coursename: $scope.courseText });
            $scope.courseText = '';
        };

        $scope.remaining = function () {
            var count = 0;
            angular.forEach($scope.courses, function (course) {
                count += course.ischeck ? 1 : 0;
            });
            return count;
        };

        $scope.archive = function () {
            var oldcourses = $scope.courses;
            $scope.courses = [];
            angular.forEach(oldcourses, function (course) {
                if (!course.ischeck) $scope.courses.push(course);
            });
        };
    }
</script>

</body>
</html>

เื่ท่านี้ก็สามารถสร้างรายการโดยใช้ AngularJS ได้แล้วครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น