Dependency Injection (DI):
Dependency Injection (DI) is a design pattern that implements inversion of control principle for resolving dependencies. It allows a programmer to remove hard coded dependencies so that the application becomes loosely coupled and extendable
AngularJS dependency injection:
AngularJS provides also provides the mechanism of Dependency Injection with the help of following core components which can be injected into each other as dependencies.
1. value: Represents a javascript object which is used to pass values to controller during config phase.
2. factory: Represents a function which is used to return value.
3. service: Represents a function or object which is used to perform specific task.
4. provider: It is used by AngularJS internally to create services, factory etc during config phase.
5. constant: Constants are used to pass values at config phase.
Note: Config phase: It represents a phase during which AngularJS bootstraps itself.
Example:
<html> <head> <title>AngularJS Dependency Injection Example</title> <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"> </script> </head> <body> <h2>AngularJS Dependency Injection Example</h2> <div ng-app = "mainApp" ng-controller = "CalcController"> <p>Enter a number: <input type = "number" ng-model = "number" /> </p> <button ng-click = "square()">X<sup>2</sup></button> <p>Result: {{result}}</p> </div> <script> var mainApp = angular.module("mainApp", []); mainApp.config(function($provide) { $provide.provider('MathService', function() { this.$get = function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }; }); }); mainApp.value("defaultInput", 5); mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }); mainApp.service('CalcService', function(MathService){ this.square = function(a) { return MathService.multiply(a,a); } }); mainApp.controller('CalcController', function($scope, CalcService, defaultInput) { $scope.number = defaultInput; $scope.result = CalcService.square($scope.number); $scope.square = function() { $scope.result = CalcService.square($scope.number); } }); </script> </body> </html> |