In AngularJS, the ng-init
directive is used to initialize variables in the application’s scope. It allows developers to set default values for variables when the application starts. While ng-init
can be useful for simple cases, it is generally recommended to use controllers for managing application logic.
In this guide, we will cover:
- What is
ng-init
? - How
ng-init
works - Syntax and Basic Example
- Using
ng-init
with Arrays and Objects ng-init
vs. Controller Initialization- Common Use Cases
- Limitations of
ng-init
- Best Practices
- Conclusion
1. What is ng-init
?
The ng-init
directive initializes variables in AngularJS directly within the HTML view. It is commonly used to define simple data for testing or setting default values.
Key Features:
Initializes variables in the HTML template.
Works inside ng-app
and ng-controller
.
Supports simple variables, arrays, and objects.
Useful for small test cases.
2. How ng-init
Works
When an AngularJS application loads, ng-init
executes the given expressions and initializes the scope variables.
3. Syntax and Basic Example
Basic Syntax:
htmlCopyEdit<div ng-init="variableName = value"></div>
- The
ng-init
directive is placed inside an HTML element. - It assigns a default value to
variableName
.
Basic Example:
<!DOCTYPE html>
<html lang="en">
<head>
<title>ng-init Example</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
</head>
<body ng-app="myApp">
<div ng-init="message='Hello, AngularJS!'">
<p>{{ message }}</p>
</div>
</body>
</html>
Explanation:
ng-init="message='Hello, AngularJS!'"
initializes themessage
variable.- The
<p>
tag displaysHello, AngularJS!
using data binding ({{ message }}
).
4. Using ng-init
with Arrays and Objects
ng-init
can also initialize arrays and objects.
Example: Initializing an Array
<div ng-init="fruits=['Apple', 'Banana', 'Mango']">
<ul>
<li ng-repeat="fruit in fruits">{{ fruit }}</li>
</ul>
</div>
Explanation:
- The
fruits
array is initialized with three values. ng-repeat
loops throughfruits
and displays them as a list.
Example: Initializing an Object
<div ng-init="person={name:'John', age:25}">
<p>Name: {{ person.name }}</p>
<p>Age: {{ person.age }}</p>
</div>
Explanation:
- The
person
object is initialized withname
andage
properties. - The values are displayed using
{{ person.name }}
and{{ person.age }}
.
5. ng-init
vs. Controller Initialization
While ng-init
is useful for simple cases, it is not recommended for complex logic. Instead, you should use an AngularJS controller.
Example: Using a Controller Instead of ng-init
<body ng-app="myApp" ng-controller="MyController">
<p>{{ message }}</p>
<script>
var app = angular.module("myApp", []);
app.controller("MyController", function($scope) {
$scope.message = "Hello from the Controller!";
});
</script>
</body>
Why use a controller instead?
Better organization of application logic.
Easier debugging and maintenance.
Controllers provide reusable and structured code.
6. Common Use Cases
Setting default values for variables.
Initializing small arrays or objects.
Quickly testing data binding in an HTML template.
Example: Setting Default Values for a Form
<form ng-init="user={name:'', email:''}">
<label>Name:</label>
<input type="text" ng-model="user.name"><br>
<label>Email:</label>
<input type="email" ng-model="user.email"><br>
<p>Entered Name: {{ user.name }}</p>
<p>Entered Email: {{ user.email }}</p>
</form>
Explanation:
- The
user
object is initialized with empty values. - As the user types,
ng-model
updates the values in real time.
7. Limitations of ng-init
Not suitable for complex logic – Use controllers instead.
Difficult to debug when used extensively.
Not reusable – Cannot be shared across multiple views.
Performance issues when initializing large datasets.
Bad Example: Complex Initialization in ng-init
<div ng-init="products=[{name:'Laptop', price:1000}, {name:'Phone', price:500}]">
<ul>
<li ng-repeat="product in products">{{ product.name }} - {{ product.price }}</li>
</ul>
</div>
Better Approach: Use a Controller
<body ng-app="myApp" ng-controller="ProductController">
<ul>
<li ng-repeat="product in products">{{ product.name }} - {{ product.price }}</li>
</ul>
<script>
var app = angular.module("myApp", []);
app.controller("ProductController", function($scope) {
$scope.products = [
{ name: 'Laptop', price: 1000 },
{ name: 'Phone', price: 500 }
];
});
</script>
</body>
Why is this better?
Easier to manage and debug.
Can be extended with functions and events.
Improves application scalability.