In AngularJS, $scope and $rootScope are both used for data binding and event handling within an application. However, they differ in their scope, lifecycle, and usage.
1. What is $scope?
$scope is an object that binds data and functions to an AngularJS controller. It acts as the execution context for expressions inside the view (HTML).
Characteristics of $scope
Created for each controller separately.
Exists only within the controller it is defined in.
When the controller is destroyed, $scope is also destroyed.
$scope properties and functions are accessible only within the controller and its child components.
Example of $scope Usage
angular.module('myApp', [])
.controller('MainController', function($scope) {
$scope.message = "Hello from MainController!";
});
Here, $scope.message is accessible only inside MainController.
2. What is $rootScope?
$rootScope is the top-level scope in AngularJS and is available globally throughout the application.
Characteristics of $rootScope
Available globally in the entire app.
It is created once when the application starts and persists throughout.
Useful for global state management.
All child scopes inherit from $rootScope.
Example of $rootScope Usage
angular.module('myApp', [])
.run(function($rootScope) {
$rootScope.globalMessage = "Hello from $rootScope!";
})
.controller('MainController', function($scope, $rootScope) {
console.log($rootScope.globalMessage); // Accessible here
});
$rootScope.globalMessage is available in all controllers.
3. Key Differences Between $scope and $rootScope
| Feature | $scope | $rootScope |
|---|---|---|
| Scope | Local (Controller-specific) | Global (Available across the app) |
| Lifetime | Created and destroyed with its controller | Created once when the app starts and exists until the app is closed |
| Hierarchy | Child of $rootScope | Parent of all $scope instances |
| Use Case | Controller-specific data and operations | Global variables and event handling across controllers |
| Inheritance | Does not inherit properties from other $scope instances | Properties are inherited by all $scope instances |
4. $scope vs $rootScope in Event Handling
$scope.$broadcast() (Broadcast to Child Scopes)
$scope.$broadcast('customEvent', 'Message to child scopes');
Sends an event downward to child controllers.
$scope.$emit() (Emit to Parent Scopes)
$scope.$emit('customEvent', 'Message to parent scope');
Sends an event upward to parent scopes.
$rootScope.$broadcast() (Broadcast to All Scopes)
$rootScope.$broadcast('customEvent', 'Message to all controllers');
Sends an event globally across all controllers.
5. When to Use $scope and $rootScope
Use $scope when:
- You need controller-specific data.
- The data is temporary and does not need to persist across controllers.
Use $rootScope when:
- You need global data (e.g., user authentication state).
- You need to communicate between multiple controllers.
- You want to trigger global events.
Avoid excessive use of $rootScope, as it can cause performance issues and make debugging difficult.
