Now.js Framework Documentation

Now.js Framework Documentation

data-text

EN 11 Dec 2025 11:59

data-text

Overview

data-text binds data values to an element's text content. It's the most commonly used directive for displaying dynamic text.

When to use:

  • Display text from data objects
  • Show user information, labels, or dynamic content
  • Format values with pipes (formatters)

Why use it:

  • ✅ Safely displays text (XSS-safe)
  • ✅ Supports formatters via pipe syntax
  • ✅ Reactive - updates automatically when data changes
  • ✅ Works with nested properties

Basic Usage

Simple Text Binding

<span data-text="username"></span>

With data:

{ username: "John Doe" }

Output:

<span>John Doe</span>

Nested Properties

<span data-text="user.profile.name"></span>

With data:

{
  user: {
    profile: {
      name: "Jane Smith"
    }
  }
}

Output:

<span>Jane Smith</span>

Syntax

<element data-text="expression | formatter1 | formatter2">
Part Description
expression Data path or expression to evaluate
\| formatter Optional formatter(s) to transform the value

Features

1. Simple Property Binding

<p data-text="title"></p>
<p data-text="description"></p>

2. Nested Object Access

<span data-text="product.category.name"></span>
<span data-text="order.customer.email"></span>

3. Array Index Access

<span data-text="items[0].name"></span>
<span data-text="users[2].email"></span>

4. Formatters (Pipes)

Transform values using formatters:

<!-- Uppercase -->
<span data-text="name | uppercase"></span>

<!-- Lowercase -->
<span data-text="email | lowercase"></span>

<!-- Date formatting -->
<span data-text="createdAt | date:'D MMM YYYY'"></span>

<!-- Number formatting -->
<span data-text="price | number:2"></span>

<!-- Currency -->
<span data-text="total | currency:'THB'"></span>

5. Chained Formatters

<span data-text="name | trim | uppercase"></span>

Advanced Examples

User Profile Card

<div class="profile-card">
  <h2 data-text="user.name"></h2>
  <p class="email" data-text="user.email | lowercase"></p>
  <p class="joined">
    Member since: <span data-text="user.createdAt | date:'MMMM YYYY'"></span>
  </p>
  <p class="status" data-text="user.status | uppercase"></p>
</div>

Product Display

<div class="product">
  <h3 data-text="product.name"></h3>
  <p class="price" data-text="product.price | currency:'THB'"></p>
  <p class="stock">
    In Stock: <span data-text="product.quantity | number"></span>
  </p>
  <p class="category" data-text="product.category.name"></p>
</div>

Inside data-for Loop

<ul data-for="item in items">
  <template>
    <li>
      <span class="index" data-text="index + 1"></span>.
      <span class="name" data-text="item.name"></span>
      <span class="price" data-text="item.price | currency"></span>
    </li>
  </template>
</ul>

With Fallback Values

<span data-text="user.nickname || user.name || 'Anonymous'"></span>

API Reference

Supported Expressions

Expression Example Description
Simple property data-text="name" Access state property
Nested property data-text="user.name" Access nested object
Array index data-text="items[0]" Access array element
Expression data-text="index + 1" Evaluate expression
Fallback data-text="a \|\| b" Use fallback if falsy

Built-in Formatters

Formatter Usage Description
uppercase \| uppercase Convert to UPPERCASE
lowercase \| lowercase Convert to lowercase
trim \| trim Remove whitespace
date \| date:'format' Format date
number \| number:decimals Format number
currency \| currency:'code' Format as currency

Common Pitfalls

⚠️ 1. Don't Use HTML Content

<!-- ❌ Wrong - HTML will be escaped -->
<div data-text="htmlContent"></div>
<!-- Output: &lt;strong&gt;Bold&lt;/strong&gt; -->

<!-- ✅ Correct - Use data-html -->
<div data-html="htmlContent"></div>

⚠️ 2. Property Path Case Sensitivity

<!-- ❌ Wrong - Case mismatch -->
<span data-text="user.Name"></span>  <!-- Won't work if data has 'name' -->

<!-- ✅ Correct - Match exact property name -->
<span data-text="user.name"></span>

⚠️ 3. Accessing Undefined Properties

<!-- ❌ May show 'undefined' -->
<span data-text="user.address.city"></span>

<!-- ✅ Use optional chaining or fallback -->
<span data-text="user.address?.city || 'N/A'"></span>