Dependency Injection
AngularJS comes with a built-in dependency  injection mechanism. It facilitates you to divide your application into  multiple different types of components which can be injected into each other as  dependencies. 
Dependency Injection is a software design pattern  that specifies how components get holds of their dependencies. In this pattern,  components are given their dependencies instead of coding them within the  component.
Modularizing your application makes it easier to  reuse, configure and test the components in your application. Following are the  core types of objects and components:
- value
- factory
- service
- provider
- constant
These objects and components can be injected into each other using AngularJS Dependency Injection.
Value
In AngularJS, value is a simple object. It can be  a number, string or JavaScript object. It is used to pass values in factories,  services or controllers during run and config phase.
            //define a module  
            var myModule = angular.module("myModule", []);  
            //create a value object and pass it a data.   
            myModule.value("numberValue", 100);  
            myModule.value("stringValue", "abc");  
            myModule.value("objectValue", { val1 : 123, val2 : "abc"} );  
            Here, values are defined using the value()  function on the module. The first parameter specifies the name of the value,  and the second parameter is the value itself. Factories, services and  controllers can now reference these values by their name.
Injecting a value
To inject a value into AngularJS controller function, add a  parameter with the same when the value is defined.
            var myModule = angular.module("myModule", []);  
            myModule.value("numberValue", 100);  
            myModule.controller("MyController", function($scope, numberValue) {  
   console.log(numberValue);  
            });  
Factory
Factory is a function that is used to return value. When a service or controller needs a value injected from the factory, it creates the value on demand. It normally uses a factory function to calculate and return the value.
Let's take an example that  defines a factory on a module, and a controller which gets the factory created  value injected:
            var myModule = angular.module("myModule", []);  
            myModule.factory("myFactory", function() {  
      return "a value";  
            });  
            myModule.controller("MyController", function($scope, myFactory) {  
            console.log(myFactory);  
            });  
Injecting values into factory
To inject a value into AngularJS controller function, add a parameter with  the same when the value is defined.
            var myModule = angular.module("myModule", []);  
            myModule.value("numberValue", 100);  
            myModule.controller("MyController", function($scope, numberValue) {  
   console.log(numberValue);  
            });  
Note: It is not the factory function that is injected, but the value produced by the factory function.
Service
In AngularJS, service is a JavaScript object  which contains a set of functions to perform certain tasks. Services are  created by using service() function on a module and then injected into  controllers. 
            //define a module  
            var mainApp = angular.module("mainApp", []);  
            ...  
            //create a service which defines a method square to return square of a number.  
            mainApp.service('CalcService', function(MathService){  
     this.square = function(a) {  
        return MathService.multiply(a,a);   
     }  
            });  
            //inject the service "CalcService" into the controller  
            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);  
     }  
            });  
Provider
In AngularJS, provider is used  internally to create services, factory etc. during config phase (phase during  which AngularJS bootstraps itself). It is the most flexible form of factory you  can create. Provider is a special factory method with a get() function which is  used to return the value/service/factory.
            //define a module  
            var mainApp = angular.module("mainApp", []);  
            ...  
            //create a service using provider which defines a method square to return square of a number.  
            mainApp.config(function($provide) {  
     $provide.provider('MathService', function() {  
        this.$get = function() {  
           var factory = {};    
           factory.multiply = function(a, b) {  
              return a * b;   
           }  
           return factory;  
        };  
     });  
            });  
Constants
You cannot inject values into the module.config() function. Instead  constants are used to pass values at config phase.
            mainApp.constant("configParam", "constant value");   
            Let's take an example to deploy all above mentioned  directives.
            <!DOCTYPE  html>  
            <html>  
            <head>  
            <title>AngularJS Dependency Injection</title>  
            </head>  
            <body>  
            <h2>AngularJS Sample Application</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  src = "angular.min.js"></script>  
            
            <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",  10);  
            
            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>  
For 
More Explanation 
&
Online Classes
  
More Explanation
&
Online Classes
Contact Us:
+919885348743 
 
        +919885348743
