Angular : Directives

Directives คือ สิ่งที่เราเพิ่มเข้าไปใน Tag ของ HTML ซึ่งจะไปสร้าง behavior ให้กับ DOM หรือ เปลี่ยนรูป DOM จะแบ่งออกเป็น 2 ประเภทใหญ่ๆ ได้แก่

1. Built-in Directive ซึ่งส่วนใหญ่ขึ้นต้นด้วย *ng ที่ Angular มีมาให้ก็จะมีมากมาย อาทิเช่น

  • ng-app : ฺบอกให้ Bootstrap เริ่มทำงาน Angular กับ element ไหน
  • ng-controller : จะใช้ controller จัดการกับ view ไหน
  • ng-model : binding ค่าเข้า view กับ model
  • ng-show/ ng-hide : เพื่อแสดง/ซ่อน element
  • ngFor : ใช้ในการวนลูป
  • ngIf : ใส่เงื่อนไขเช็คค่า

2. Custom Directive ที่เราสามารถกำหนดเอง จะแบ่งเป็น

  • HTML DOMS element – เราสามารถสร้าง element ใหม่ของเราขึ้นมาเองได้ เช่น <ma-directive></ma-directive>
  • attribute เราสามารถสร้าง attribute ให้กับ element เช่น <div ma-directive=”test”></div>
  • class name ตั้งชื่อคลาส เช่น <div class=”ma-directive: test;”></div>
  • comment เช่น <!–directive: ma-directive test –>

เราจะมาลองทำทั้งสองแบบ ก่อนอื่นสร้าง component ใหม่ชื่อ user โดยใช้คำสั่งดังภาพที่ 1 และใส่เพิ่ม tag

<app-user></app-user> ในหน้า app.component.html

ภาพที่ 1 สร้าง user component

จากนั้นเปิดไฟล์ user.component.ts เพิ่มโค้ดดังภาพที่ 2 ซึ่งเป็นการกำหนดตัวแปรชื่อ users เก็บข้อมูลแบบ array แต่ละ user ประกอบไปด้วย name, code และ status ซึ่งเราจะนำไปวนลูปแสดงข้อมูล

ภาพที่ 2 สร้าง array ของ users

การใช้ Built-in Directive ในที่นี้จะยกตัวอย่าง ngFor สำหรับการวนลูป ซึ่งเราสามารถนำไปใส่ใน HTML Tag หรือ HTML Element นั้นๆได้เลยในไฟล์ user.component.html และหากต้องการใส่เงื่อนไข เราสามารถใช้ ngIf เพื่อเช็คค่าต่างๆ ดังภาพที่ 3

ภาพที่ 3 ตัวอย่างการใช้ ngFor และ ngIf

จากภาพที่ 3 เราใช้ ngIf เพื่อตรวจสอบสถานะของ user โดยถ้าสถานะเป็น single จะแสดงรูปดาว และสถานะ married จะแสดงรูปหัวใจ เมื่อรันหน้าเว็บจะปรากฎหน้าจอดังภาพที่ 4

ภาพที่ 4 ผลลัพธ์ที่ได้

สำหรับตัวอย่างการทำ Custom Directive เราจะมาสร้าง highlight เมื่อเอาเมาส์ไปชี้ที่ชื่อ user โดยใช้คำสั่งดังภาพที่ 5 เพื่อสร้างDirective ชื่อ highlight

ภาพที่ 5 คำสั่งสร้าง Custom Directive

จากนั้นเปิดไฟล์ highlight.directive.ts ดังภาพที่ 6 ซึ่ง selector เป็นตัวบอกว่าคอมโพเน้นของเราจะมีชื่อเป็นอะไรเมื่อไปปรากฎที่ HTML Element หรือ Attribute ส่วนการเรียกใช้งานก็ให้อ้าง attribute “appHighlight” ตามภาพที่ 3

ภาพที่ 6 highlight directive

จากภาพที่ 6 เป็นการเซตค่าเมื่อเอาเมาส์ไปชี้ onMouseEnter โดยจะไปเรียกฟังก์ชั่น highlight() เพื่อที่จะเปลี่ยนสีพื้นหลัง และ ขนาดตัวอักษร และเมื่อเอาเมาส์ออกเรียกฟังก์ชั่น undoHighlight() ซึ่งจะได้ผลลัพธ์ดังภาพที่ 7

ภาพที่ 7 แสดงผลลัพธ์การทำ highlight directive