Angular คือ ตอนที่ 5 : ตัวกรอง (Filters)

  1. รู้เบื้องต้นเกี่ยวกับตัวกรองใน AngularJS
  2. ตัวกรอง (Filters) ปรับปรุง (Enhance) ส่วนต่อประสานผู้ใช้ (User Interface)ใน AngularJS อย่างไร
  3. การสร้างตัวกรองแบบกำหนด (Custom Filters) เองใน AngularJS
  4. การทดสอบตัวกรอง (Testing Filters)ใน AngularJS
  5. ผลกระทบ (Impact) ของตัวกรอง (Filters) ต่อประสิทธิภาพ (Filters)

AngularJS พัฒนาโดย Google เป็นเฟรมเวิร์กที่ใช้ JavaScript แบบโอเพ่นซอร์สที่มีประสิทธิภาพซึ่งได้เข้ามาอยู่ในเว็บแอปพลิเคชันสมัยใหม่มากมาย ความสามารถมีตั้งแต่การทำเว็บ Angular และทำแอพอย่างง่ายไปจนถึงการทำเว็บ Angular และทำแอพที่ซับซ้อน หนึ่งในเหตุผลหลักที่ชื่นชม AngularJS เป็นเพราะคุณสมบัติที่เป็นเอกลักษณ์ เช่น คำสั่ง การฉีดการพึ่งพา (dependency injection) การผูกข้อมูลแบบสองทาง (two-way data binding) และตัวกรอง (Filters)

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

1. รู้เบื้องต้นเกี่ยวกับตัวกรองใน AngularJS

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

ตัวกรองใน AngularJS สามารถใช้กับนิพจน์โดยใช้อักขระไปป์ ( |) ตามด้วยชื่อตัวกรองและพารามิเตอร์ทางเลือกใดๆ

{{ expression | filterName:parameter }}

มีตัวกรองในตัวมากมายใน AngularJS เช่น currency, date, json, lowercase, uppercase, , orderBy, filter, number, limitTo และอื่นๆ ตัวกรองเหล่านี้พร้อมใช้งานทันทีที่แกะกล่อง ทำให้สะดวกสำหรับนักพัฒนา

2. ตัวกรอง (Filters) ปรับปรุง (Enhance) ส่วนต่อประสานผู้ใช้ (User Interface)ใน AngularJS อย่างไร

การทำเว็บ Angular และทำแอพต้องมีความสมดุลที่ดีระหว่างการจัดการข้อมูลและการออกแบบส่วนติดต่อผู้ใช้ ใน AngularJS ตัวกรองมีบทบาทสำคัญในการแสดงข้อมูลในแบบที่ผู้ใช้เข้าถึงและเข้าใจได้

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

<p>{{ product.price | currency }}</p>

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

<p>Published on: {{ post.date | date:'medium' }}</p>

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

3. การสร้างตัวกรองแบบกำหนด (Custom Filters) เองใน AngularJS

แม้ว่า AngularJS จะมีตัวกรองในตัวหลายแบบ แต่อาจมีบางสถานการณ์ที่คุณต้องการการจัดการข้อมูลบางประเภทที่ไม่สามารถใช้ได้ ในกรณีเช่นนี้ AngularJS ให้คุณสร้างตัวกรองแบบกำหนดเองได้

ในการกำหนดตัวกรองแบบกำหนดเอง คุณต้องลงทะเบียนฟังก์ชันโรงงานตัวกรองใหม่กับโมดูลของคุณ ฟังก์ชันนี้ควรส่งคืนฟังก์ชันอื่นที่ทำกระบวนการกรองจริง

ต่อไปนี้คือตัวอย่างตัวกรองแบบกำหนดเองที่ทำให้อักษรตัวแรกของสตริงเป็นตัวพิมพ์ใหญ่:

angular.module('myApp', []).filter('capitalize', function() {
  return function(input) {
    if (input)
      return input[0].toUpperCase() + input.slice(1);
    }
});

จากนั้น คุณสามารถใช้ตัวกรองแบบกำหนดเองนี้ในเทมเพลตของคุณได้ดังนี้:

<p>{{ post.title | capitalize }}</p>

ด้วยการสร้างตัวกรองแบบกำหนดเอง คุณสามารถปรับแต่งแอปพลิเคชัน AngularJS ของคุณให้ตรงกับความต้องการเฉพาะ นำเสนอประสบการณ์ผู้ใช้ที่ปรับแต่งได้มากขึ้น

4. การทดสอบตัวกรอง (Testing Filters)ใน AngularJS

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

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

describe('capitalize filter', function () {
    var $filter, capitalize;

    beforeEach(angular.mock.module('myApp'));

    beforeEach(inject(function (_$filter_) {
        $filter = _$filter_;
        capitalize = $filter('capitalize');
    }));

    it('Should capitalize the first letter of a string', function() {
        var name = 'angularJS';
        expect(capitalize(name)).toEqual('AngularJS');
    });
});

ในตัวอย่างนี้ เราใช้ Jasmine เพื่อกำหนดชุดทดสอบสำหรับตัวกรอง ‘ตัวพิมพ์ใหญ่’ ของเรา ก่อนอื่นเราจะใส่บริการ ‘$filter’ แล้วจึงเรียกตัวกรองที่กำหนดเองของเราโดยใช้ ‘$filter(‘capitalize’)’ จากนั้นเราจะเขียนการทดสอบเพื่อตรวจสอบว่าตัวกรองของเราใช้อักษรตัวแรกของสตริงเป็นตัวพิมพ์ใหญ่อย่างถูกต้อง

5. ผลกระทบ (Impact) ของตัวกรอง (Filters) ต่อประสิทธิภาพ (Filters)

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

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

วิธีหนึ่งในการลดปัญหานี้คือการใช้ตัวกรองเท่าที่จำเป็นและหลีกเลี่ยงการใช้ในคำสั่ง ‘ng-repeat’ ซึ่งสามารถเพิ่มจำนวนการเรียกใช้ฟังก์ชันได้อย่างมาก อีกวิธีหนึ่งคือการใช้ไวยากรณ์ ‘::’ (การรวมครั้งเดียว) หากคุณทราบว่าข้อมูลของคุณจะไม่เปลี่ยนแปลง สิ่งนี้ทำให้มั่นใจได้ว่าตัวกรองจะทำงานเพียงครั้งเดียว ซึ่งเป็นการปรับปรุงประสิทธิภาพ

<p>{{ ::product.price | currency }}</p>

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


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

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


Angular คืออะไร (AngularJS)

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