![]()
$parse is an AngularJS service that converts Angular expressions (like "user.name" or "a + b") into executable functions. It allows dynamic evaluation of expressions without using eval(), making it secure and efficient.
Why Use $parse?
- Allows evaluating expressions dynamically at runtime.
- Safely extracts values from scope objects.
- Can be used inside custom directives, filters, and services.
- Provides better performance than
eval(), which is unsafe and slow.
How $parse Works?
Basic Example
var app = angular.module("myApp", []);
app.controller("MainController", function ($scope, $parse) {
$scope.user = { name: "John Doe", age: 30 };
var expression = $parse("user.name"); // Compile the expression
console.log(expression($scope)); // Output: "John Doe"
});
Explanation:
$parse("user.name")converts"user.name"into a function.expression($scope)executes the function and retrieves"John Doe"from$scope.user.name.
🔄 Assigning Values with $parse
$parse can also set values dynamically.
Example: Modifying Scope Values
app.controller("MainController", function ($scope, $parse) {
var setter = $parse("user.age").assign; // Get setter function
setter($scope, 35); // Set new value
console.log($scope.user.age); // Output: 35
});
Here, $parse("user.age").assign allows us to dynamically set values without direct $scope manipulation.
Using $parse in Directives
Scenario: Extracting Expressions Dynamically
Custom directives often use $parse to evaluate attributes dynamically.
Example: Custom Directive Using $parse
app.directive("customInput", function ($parse) {
return {
restrict: "E",
scope: { model: "=" },
template: '<input type="text" ng-model="model">',
link: function (scope, element, attrs) {
var parsedModel = $parse(attrs.model);
scope.model = parsedModel(scope.$parent);
}
};
});
How It Works?
$parse(attrs.model)extracts the model expression dynamically.- It retrieves the initial value from the parent scope.
- The input field updates dynamically based on changes.
Common Mistakes with $parse
1️⃣ Forgetting to Call the Parsed Expression
Incorrect:
var expression = $parse("user.name");
console.log(expression); // Returns function, not value
Fix:
console.log(expression($scope)); // Correct: Executes function
2️⃣ Not Using .assign() for Assignments
Incorrect:
$parse("user.age")($scope) = 40; // Error: Cannot assign value like this
Fix:
$parse("user.age").assign($scope, 40); // Correct way to set value
Key Takeaways
$parse converts expressions into executable functions.
It’s safer and more efficient than eval().
Use .assign() to modify scope values dynamically.
Commonly used in directives, filters, and services.
