Angular คือ ตอนที่ 4 : คอนโทรลเลอร์ (Controllers)

  1. คอนโทรลเลอร์ (Controllers)คืออะไร?
  2. การตั้งค่าคอนโทรลเลอร์ (Setting up Controllers)
  3. ขอบเขตในคอนโทรลเลอร์ (Scope in Controllers)
  4. บทบาท (Role) ของคอนโทรลเลอร์ใน AngularJS
  5. คอนโทรลเลอร์และการฉีดการพึ่งพา (Dependency Injection)
  6. แนวทางปฏิบัติที่ดีที่สุดกับคอนโทรลเลอร์

AngularJS ซึ่งเป็นเฟรมเวิร์กแอปพลิเคชันเว็บส่วนหน้าโอเพ่นซอร์สที่มีชื่อเสียงของ Google เป็นเครื่องมือที่มีประสิทธิภาพในการทำเว็บ Angular และทำแอพหน้าเดียว (SPA) และเว็บไซต์แบบไดนามิก ลักษณะพื้นฐานอย่างหนึ่งของ AngularJS ที่ช่วยให้ประสิทธิภาพสูงคือการใช้คอนโทรลเลอร์ ในบทความนี้ เราจะเจาะลึกว่า Controller คืออะไร ทำงานอย่างไร และปรับปรุงการทำเว็บ Angular และทำแอพของคุณอย่างไรเมื่อสร้างเว็บไซต์และแอป

1. คอนโทรลเลอร์ (Controllers)คืออะไร?

ใน AngularJS คอนโทรลเลอร์ (Controllers)เป็นวัตถุ JavaScript ที่สร้างขึ้นโดยตัวสร้างวัตถุ JavaScript มาตรฐาน เป็นส่วนสำคัญของสถาปัตยกรรม AngularJS และใช้เพื่อควบคุมข้อมูลของแอปพลิเคชัน AngularJS คอนโทรลเลอร์กลายเป็นลิงค์ที่ช่วยอำนวยความสะดวกในการเชื่อมต่อระหว่างมุมมอง (views) (เพจ HTML) และโมเดล (ข้อมูล) พวกมันทำหน้าที่เป็นบริดจ์ ถ่ายทอดข้อมูลไปยังมุมมอง (views) และส่งอินพุตของผู้ใช้กลับไปยังโมเดล การทำความเข้าใจกับคอนโทรลเลอร์เป็นสิ่งสำคัญในการทำเว็บ Angular และทำแอพให้ประสบความสำเร็จ

2. การตั้งค่าคอนโทรลเลอร์ (Setting up Controllers)

ในการกำหนดคอนโทรลเลอร์ใน AngularJS เราใช้.controller()ฟังก์ชัน ฟังก์ชันต้องการพารามิเตอร์สองตัว: ชื่อของคอนโทรลเลอร์และฟังก์ชันที่มีโค้ดของคอนโทรลเลอร์ ลองดูตัวอย่าง:

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  $scope.firstName = "John";
  $scope.lastName = "Doe";
});

ในตัวอย่างนี้ ‘myApp’ คือแอปพลิเคชัน AngularJS ของเรา และ ‘myCtrl’ คือคอนโทรลเลอร์ ‘$scope’ คือวัตถุที่มีขอบเขตของคอนโทรลเลอร์ ซึ่ง ‘firstName’ และ ‘lastName’ เป็นคุณสมบัติของโมเดล โดยการปรับเปลี่ยนคุณสมบัติภายใน $scope วัตถุ เราสามารถควบคุมข้อมูลที่นำเสนอต่อผู้ใช้

3. ขอบเขตในคอนโทรลเลอร์ (Scope in Controllers)

คำว่า ‘scope’ ใน AngularJS สามารถเปรียบได้กับแนวคิดของ ‘this’ ใน JavaScript ทั่วไป หมายถึงรูปแบบการใช้งาน กาวที่ยึดคอนโทรลเลอร์และมุมมอง (views) ไว้ด้วยกัน คอนโทรลเลอร์แต่ละตัวมีขอบเขตที่เกี่ยวข้องกัน ตามค่าเริ่มต้น คอนโทรลเลอร์ AngularJS จะมีขอบเขตของตัวเอง แต่ยังสามารถสืบทอดขอบเขตจากตัวควบคุมหลักได้

วัตถุ $scope ทำหน้าที่เป็นตัวอ้างอิงถึงรูปแบบแอปพลิเคชันและเป็นสะพานสื่อสารระหว่างคอนโทรลเลอร์และมุมมอง (views) ในกระบวนการทำเว็บ Angular และทำแอพ $scope มีความสำคัญในการกำหนดฟังก์ชันและตัวแปร เชื่อมโยงเข้าด้วยกันกับมุมมอง (views)

4. บทบาท (Role) ของคอนโทรลเลอร์ใน AngularJS

คอนโทรลเลอร์ใน AngularJS เป็นส่วนสำคัญของรูปแบบ MVC (Model-View-Controller) ซึ่ง AngularJS นำมาใช้ พวกเขาทำหน้าที่หลักในการตั้งค่าสถานะเริ่มต้นของวัตถุ $scope และเพิ่มพฤติกรรมให้กับวัตถุ $scope

ในรูปแบบ MVC คอนโทรลเลอร์จะรับอินพุตจากผู้ใช้และดำเนินการที่จำเป็นกับข้อมูล (โมเดล) ผลลัพธ์จะถูกส่งต่อไปยังมุมมองเพื่อนำเสนอต่อผู้ใช้ กระบวนการทั้งหมดนี้อำนวยความสะดวกโดย $scope ใน AngularJS

ในขณะที่สร้างแอปหรือเว็บไซต์ด้วย Angular สิ่งสำคัญคือต้องจำไว้ว่าคอนโทรลเลอร์แต่ละตัวมีหน้าที่รับผิดชอบในการเริ่มต้นขอบเขตใหม่ ดังนั้น ฟังก์ชันหรือคุณสมบัติใดๆ ที่กำหนดไว้ภายใน Controller จึงกลายเป็นส่วนหนึ่งของขอบเขตนั้นและสามารถเข้าถึงได้โดยตรงจากมุมมอง

5. คอนโทรลเลอร์และการฉีดการพึ่งพา (Dependency Injection)

การพึ่งพาการฉีด (DI) เป็นรูปแบบการออกแบบที่ AngularJS ใช้ในการจัดการส่วนประกอบและการพึ่งพา คอนโทรลเลอร์ใน AngularJS ใช้ประโยชน์จาก DI อย่างกว้างขวาง ตัวอย่างเช่น เมื่อคุณเห็นบริการ ‘$scope’ ถูกส่งผ่านเป็นพารามิเตอร์ไปยังฟังก์ชันคอนโทรลเลอร์ นี่คือ DI ของ AngularJS ในที่ทำงาน

บริการ โรงงาน และมูลค่าเป็นองค์ประกอบบางส่วนที่สามารถแทรกเข้าไปในคอนโทรลเลอร์ได้ พวกเขาช่วยในการทำให้แอปพลิเคชันเป็นโมดูลและส่งเสริมการนำรหัสกลับมาใช้ใหม่

app.controller('myCtrl', function($scope, $location) {
  $scope.myUrl = $location.absUrl();
});

ในตัวอย่างนี้ เราใส่ $location บริการลงในคอนโทรลเลอร์ของเรา:

app.controller('myCtrl', function($scope, $location) {
  $scope.myUrl = $location.absUrl();
});

บริการ นี้ $location เป็นบริการ AngularJS ในตัวที่ให้วิธีการจัดการ URL ของแอปพลิเคชัน ในตัวอย่างนี้ เราใช้ URL นี้เพื่อดึง URL ที่สมบูรณ์ของแอปและแนบไป $scope.myUrl กับ สิ่งนี้จะสาธิตวิธีการใช้บริการต่างๆ ภายในคอนโทรลเลอร์เพื่อปรับปรุงฟังก์ชันการทำงาน

6. แนวทางปฏิบัติที่ดีที่สุดกับคอนโทรลเลอร์

ในขณะที่พัฒนาเว็บไซต์หรือแอพด้วย AngularJS สิ่งสำคัญคือต้องปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดบางประการเกี่ยวกับคอนโทรลเลอร์:

  1. ห้ามจัดการ DOM ในคอนโทรลเลอร์ : AngularJS ให้การแยกข้อกังวลที่ชัดเจน ดังนั้น ควรใช้ Controller สำหรับการจัดการข้อมูล ไม่ใช่สำหรับการจัดการ Document Object Model (DOM) คำสั่งเป็นวิธีที่ดีกว่าในการจัดการกับ DOM ใน AngularJS
  2. หลีกเลี่ยงการใช้ $scope : AngularJS เวอร์ชันที่ใหม่กว่าแนะนำcontrollerAsไวยากรณ์ซึ่งอนุญาตให้นักพัฒนาใช้นามแฝงของคอนโทรลเลอร์ แนวทางปฏิบัตินี้ได้รับการสนับสนุนเนื่องจากส่งเสริมการใช้thisแทน$scopeทำให้รหัสอ่านได้ง่ายขึ้นและมีแนวโน้มที่จะเกิดข้อผิดพลาดที่เกี่ยวข้องกับการสืบทอดขอบเขตน้อยลง
  3. Keep Controllers Slim : รูปแบบการต่อต้านทั่วไปในการพัฒนา AngularJS คือคอนโทรลเลอร์ที่อ้วน คอนโทรลเลอร์ควรมีขนาดบางโดยเน้นที่ความต้องการในทันทีของมุมมอง พิจารณาการขนถ่ายตรรกะและการจัดการข้อมูลไปยังบริการที่สามารถแทรกเข้าไปในคอนโทรลเลอร์ได้
  4. หนึ่งคอนโทรลเลอร์ต่อ View (One Controller Per View) : นี่เป็นกฎที่ดีที่ควรปฏิบัติตาม แม้ว่า AngularJS จะอนุญาตให้คุณใช้คอนโทรลเลอร์หลายตัวต่อการดู แต่ก็ทำให้แอปพลิเคชันจัดการและเข้าใจได้ยากขึ้น

คอนโทรลเลอร์มีบทบาทสำคัญใน AngularJS ทำให้เป็นแนวคิดพื้นฐานในการทำความเข้าใจและเชี่ยวชาญในการทำเว็บ Angular และทำแอพ พวกมันทำหน้าที่เป็นสื่อกลางในการสื่อสารระหว่างมุมมองและโมเดล มอบการเชื่อมโยงข้อมูลที่ราบรื่นเพื่อประสบการณ์การใช้งานที่ราบรื่น

ด้วยการใช้แนวทางปฏิบัติที่ดีที่สุดและการทำความเข้าใจฟังก์ชันการทำงาน คอนโทรลเลอร์สามารถปรับปรุงประสิทธิภาพของคุณได้อย่างมากในการทำเว็บ Angular และทำแอพที่มีประสิทธิภาพและโต้ตอบได้โดยใช้ AngularJS เมื่อคุณเจาะลึกลงไปใน AngularJS คุณจะพบกับสถานการณ์ที่ซับซ้อนมากขึ้น ซึ่งความเข้าใจอย่างถ่องแท้เกี่ยวกับคอนโทรลเลอร์และแนวทางปฏิบัติที่ดีที่สุดจะให้บริการคุณได้เป็นอย่างดี

ไม่ว่าคุณกำลังทำเว็บ Angular และทำแอพหน้าเดียวหรือเว็บไซต์ที่ซับซ้อนแบบไดนามิก AngularJS และรูปแบบ MVC ที่มีคอนโทรลเลอร์เป็นแกนหลัก จะนำเสนอโซลูชันที่ปรับขนาดได้ มีประสิทธิภาพ และแข็งแกร่งสำหรับการทำเว็บ Angular และทำแอพส่วนหน้า


Angular คืออะไร (AngularJS)

Angular คือ ตอนที่ 3 : นิพจน์ (Expressions)
Angular คือ ตอนที่ 5 : ตัวกรอง (Filters)