Now.js Framework Documentation

Now.js Framework Documentation

data-class

TH 15 Dec 2025 08:53

data-class

ภาพรวม

data-class เพิ่มหรือลบ CSS classes แบบ dynamic ตามค่าข้อมูล รองรับสามโหมดสำหรับการใช้งานที่แตกต่างกัน

ใช้เมื่อ:

  • สลับ classes ตามเงื่อนไข
  • สลับระหว่างสอง classes
  • เพิ่ม class names แบบ dynamic จากข้อมูล

ทำไมต้องใช้:

  • ✅ สามโหมด binding ที่ยืดหยุ่น
  • ✅ หลาย class bindings ใน attribute เดียว
  • ✅ อัพเดทแบบ reactive เมื่อข้อมูลเปลี่ยน
  • ✅ แยกออกจาก static classes อย่างชัดเจน

การใช้งานพื้นฐาน

สลับ Class

<div data-class="active:isActive">เนื้อหา</div>

กับข้อมูล:

{ isActive: true }

ผลลัพธ์:

<div class="active">เนื้อหา</div>

Syntax

data-class รองรับสามโหมด:

โหมด 1: Binding Mode

<element data-class="className:expression">

สลับ class ตามความเป็น true/false ของ expression

โหมด 2: Ternary Mode

<element data-class="condition ? 'classIfTrue' : 'classIfFalse'">

สลับระหว่างสอง classes

โหมด 3: Expression Mode

<element data-class="expressionReturningClassName">

เพิ่ม class(es) จากผลลัพธ์ของ expression

ฟีเจอร์

โหมด 1: Binding Mode

สลับหนึ่งหรือหลาย classes ตามเงื่อนไข:

<!-- Class เดียว -->
<div data-class="active:isActive"></div>

<!-- หลาย classes -->
<div data-class="active:isActive, disabled:isDisabled, highlight:isHighlighted"></div>

ตัวอย่าง:

{
  isActive: true,
  isDisabled: false,
  isHighlighted: true
}

ผลลัพธ์:

<div class="active highlight"></div>

โหมด 2: Ternary Mode

สลับระหว่างสอง classes:

<div data-class="isExpanded ? 'expanded' : 'collapsed'"></div>

กับ isExpanded: true:

<div class="expanded"></div>

กับ isExpanded: false:

<div class="collapsed"></div>

โหมด 3: Expression Mode

เพิ่ม class(es) จากค่าข้อมูล:

<i data-class="item.icon"></i>

กับข้อมูล:

{ item: { icon: "fa fa-user" } }

ผลลัพธ์:

<i class="fa fa-user"></i>

รวมกับ static classes:

<i class="icon" data-class="iconType"></i>

ผลลัพธ์:

<i class="icon fa fa-home"></i>

ตัวอย่างขั้นสูง

เมนูนำทาง

<nav>
  <a href="/" data-class="active:currentPage === 'home'">หน้าแรก</a>
  <a href="/about" data-class="active:currentPage === 'about'">เกี่ยวกับ</a>
  <a href="/contact" data-class="active:currentPage === 'contact'">ติดต่อ</a>
</nav>

Status Badges

<span class="badge" data-class="status === 'active' ? 'badge-success' : 'badge-secondary'">
  <span data-text="status | uppercase"></span>
</span>

Card Component

<div class="card"
     data-class="selected:isSelected, disabled:isDisabled, featured:isFeatured">
  <h3 data-text="title"></h3>
  <p data-text="description"></p>
</div>

Dynamic Icon

<button class="btn">
  <i class="icon" data-class="isLoading ? 'fa-spinner fa-spin' : 'fa-check'"></i>
  <span data-text="buttonText"></span>
</button>

ภายใน data-for Loop

<ul data-for="item in items">
  <template>
    <li data-class="active:item.isActive, completed:item.isCompleted">
      <span data-text="item.name"></span>
    </li>
  </template>
</ul>

เงื่อนไขซับซ้อน

<div data-class="
  error:hasError && !isLoading,
  success:isSuccess && !hasError,
  loading:isLoading
"></div>

สลับธีม

<div class="app" data-class="theme">
  <!-- theme = 'dark-mode' หรือ 'light-mode' -->
</div>

API อ้างอิง

การตรวจจับโหมด

รูปแบบ โหมด คำอธิบาย
condition ? 'a' : 'b' Ternary สลับระหว่างสอง classes
class:expression Binding สลับ class ตามเงื่อนไข
expression Expression เพิ่ม class จากผลลัพธ์ expression

ตัวอย่าง Expression

Expression ผลลัพธ์
isActive true → เพิ่ม class, false → ลบ
count > 0 การเปรียบเทียบ Boolean
status === 'active' ตรวจสอบความเท่ากัน
item.isEnabled && !item.isPending เงื่อนไขซับซ้อน

ข้อควรระวัง

⚠️ 1. ความสับสนของโหมด

<!-- ❌ Binding mode ต้องมี colon -->
<div data-class="active"></div>

<!-- ✅ Binding mode ที่ถูกต้อง -->
<div data-class="active:isActive"></div>

<!-- ✅ หรือ expression mode (เพิ่ม class จากข้อมูล) -->
<div data-class="className"></div>  <!-- className = 'active' -->

⚠️ 2. Quotes ใน Ternary Mode

<!-- ❌ ผิด - ไม่มี quotes -->
<div data-class="isActive ? active : inactive"></div>

<!-- ✅ ถูก - มี quotes -->
<div data-class="isActive ? 'active' : 'inactive'"></div>

⚠️ 3. ไม่เขียนทับ Static Classes

<!-- Static classes คงอยู่; data-class เพิ่ม/ลบแบบ dynamic -->
<div class="card base" data-class="active:isActive">
  <!-- ผลลัพธ์: class="card base active" เมื่อ isActive เป็น true -->
</div>

เปรียบเทียบ: Attribute vs data-class

วิธี ใช้เมื่อ
data-attr="class:..." กำหนด class attribute ทั้งหมด
data-class="..." สลับ classes แต่ละตัว
<!-- แทนที่ classes ทั้งหมด -->
<div data-attr="class:'type-' + itemType"></div>

<!-- เพิ่ม/ลบ classes เฉพาะ -->
<div class="card" data-class="active:isActive"></div>

Directives ที่เกี่ยวข้อง

  • data-attr - สำหรับกำหนด class attribute
  • data-style - สำหรับ inline styles
  • data-if - สำหรับแสดงแบบมีเงื่อนไข