Using one-time binding (::) for static data

Loading

What You’ll Learn

What is one-time binding in AngularJS?
Why should you use :: for static data?
Performance benefits of one-time binding
Examples of using :: in templates and controllers


1️⃣ What is One-Time Binding in AngularJS?

🔹 The Problem with Regular Binding

In AngularJS, expressions inside {{ }} are evaluated continuously during each digest cycle. Even if the data never changes, AngularJS keeps watching it, leading to unnecessary performance overhead.

For example:

<h1>{{ user.name }}</h1>

If user.name never changes, this still gets checked in every digest cycle.


What is One-Time Binding (::)?

One-time binding (::) ensures that the expression is evaluated only once and then removed from the watchlist.

Syntax:

<h1>{{ ::user.name }}</h1>

Behavior:

  • AngularJS binds the value once
  • After the first evaluation, the watcher is removed
  • No further digest cycles are triggered for that value

2️⃣ Why Use One-Time Binding?

Improves Performance

  • Reduces the number of watchers
  • Speeds up the digest cycle
  • Improves page load times

Best for Static Data

  • Ideal for user profiles, labels, configuration settings, etc.
  • Works well when data is fetched once and never changes

Reduces Memory Usage

  • Prevents unnecessary memory allocation for watchers
  • Cleans up the scope more efficiently

3️⃣ How to Use One-Time Binding (::)

1. Using :: in Templates

<h1>{{ ::user.name }}</h1>
<p>{{ ::user.age }}</p>

This ensures user.name and user.age are evaluated only once.


2. Using :: in ng-bind

<h1 ng-bind="::user.name"></h1>

Same as {{ ::user.name }}, but prevents flickering during data loading.


3. Using :: in ng-repeat

<ul>
<li ng-repeat="item in ::items">{{ item.name }}</li>
</ul>

This removes the watcher after the initial population of items.


4. Using :: in ng-if

<div ng-if="::user.isAdmin">
<p>Welcome, Admin!</p>
</div>

Evaluates user.isAdmin once and does not change dynamically.


4️⃣ One-Time Binding in Controllers

Example 1: Fetching Data Once

app.controller("UserController", function($scope, $http) {
$http.get("/api/user").then(function(response) {
$scope.user = response.data;
});
});

Use {{ ::user.name }} in the view to ensure it binds only once.


Example 2: One-Time Binding with $timeout

app.controller("ProfileController", function($scope, $timeout) {
$timeout(function() {
$scope.profile = { name: "John Doe", age: 30 };
}, 2000);
});

Use ::profile.name in the template so that the binding happens only after the data is available.


5️⃣ When Not to Use One-Time Binding

For dynamic data that changes frequently

  • Example: Live search results
  • Example: Real-time stock price updates

When binding needs to update based on user interaction

  • Example: Updating form input fields

6️⃣ Final Summary

FeatureRegular Binding ({{ }})One-Time Binding ({{ :: }})
PerformanceSlower (always watched)Faster (evaluated once)
Digest CycleRuns on every cycleRuns only once
Use CaseDynamic DataStatic Data
Memory UsageHigher (more watchers)Lower (watcher removed)

Leave a Reply

Your email address will not be published. Required fields are marked *