Angular Pipe: สร้าง Custom Pipe และใช้ Built-in Pipes
#angular12 เม.ย. 2569
Pipe คืออะไร
Pipe ใน Angular ใช้สำหรับ transform ข้อมูลใน template เช่น format วันที่, ตัวเลข, หรือแปลงข้อความ
Built-in Pipes ที่ใช้บ่อย
<!-- DatePipe -->
<p>{{ today | date:'dd/MM/yyyy' }}</p>
<p>{{ today | date:'short' }}</p>
<!-- CurrencyPipe -->
<p>{{ price | currency:'THB':'symbol':'1.2-2' }}</p>
<!-- DecimalPipe -->
<p>{{ 1234567.89 | number:'1.2-2' }}</p>
<!-- UpperCase / LowerCase -->
<p>{{ name | uppercase }}</p>
<p>{{ name | lowercase }}</p>
<!-- SlicePipe -->
<p>{{ longText | slice:0:100 }}...</p>
<!-- JsonPipe (debug) -->
<pre>{{ data | json }}</pre>
<!-- AsyncPipe -->
<p>{{ user$ | async }}</p>
สร้าง Custom Pipe
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'thaiDate',
standalone: true
})
export class ThaiDatePipe implements PipeTransform {
transform(value: Date | string): string {
const date = new Date(value);
return date.toLocaleDateString('th-TH', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
}
}
<p>{{ article.createdAt | thaiDate }}</p>
<!-- ผลลัพธ์: 13 เมษายน 2569 -->
Pipe กับ Parameter
@Pipe({ name: 'truncate', standalone: true })
export class TruncatePipe implements PipeTransform {
transform(value: string, limit: number = 100, suffix: string = '...'): string {
if (value.length <= limit) return value;
return value.slice(0, limit) + suffix;
}
}
<p>{{ description | truncate:50:'...' }}</p>
Pure vs Impure Pipe
// Pure (default) - รันเฉพาะเมื่อ input เปลี่ยน
@Pipe({ name: 'filter', pure: true })
// Impure - รันทุก change detection cycle (ระวัง performance)
@Pipe({ name: 'filter', pure: false })
สรุป
Pipe ช่วยให้ template สะอาดขึ้น ไม่ต้องเขียน logic การ format ใน component ควรใช้ Built-in Pipes ก่อน ถ้าไม่พอค่อยสร้าง Custom Pipe ครับ