Search This Blog

2016-01-11

Angular JS Tutorial9: services,factory,provider

AngularJS Service, Factory or Provider all are used for the same purpose of creating utility function that can be used throughout the page with inject-able object. However, the way it is created and the way it is used are different. Here we shall try to understand them clearly.


AngularJS Service:
Angular Service is used to for sharing utility functions with the service reference in the controller. Service is singleton in nature so for once service only one instance is created in the browser and the same reference is used throughout the page.In the service, we create function names as property with this object.

AngularJS Factory :
The purpose of Factory is also same as Service however in this case we create a new object and add functions as properties of this object and at the end we return this object.

AngularJS Provider:
The purpose of this is again same however Provider gives the output of it's $get function.

Example :

9.html:

<!DOCTYPE html>
<html lang="en">
<head>
 <title>services,factory,provider</title>
 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
 <script src="9controller.js"></script>

</head>
<body ng-app="myapp" ng-controller="mycontroller">
 {{mymessage}}

</body>
</html>

9controller.js:
var app=angular.module('myapp',[]);

app.service('myservice',function(){
 this.mymessage='this is from my service';
}
);
app.factory('myfactory',function(){
 var factory={};
 factory.mymessage='this is from my factory';
 return factory;
}
);
app.provider('myprovider',function(){
 var m1='this is from my provider';
 return {
  setMessage:function(name){//1)its required,if we need set the value
   m1 += name;
  },
  $get:function(){
   return {
    message:m1
   }
  }
 }
});
//2)its required,if we need set the value
app.config(function(myproviderProvider){//ProviderSuffix
 myproviderProvider.setMessage("Manab");
});
app.controller('mycontroller',function($scope,myservice,myfactory,myprovider){
 $scope.mymessage=[myservice.mymessage,myfactory.mymessage,myprovider.message];
});
// app.controller('mycontroller',function($scope,myservice,myfactory){
//  $scope.mymessage='ddd';
// });


Output:


Angular JS Tutorial8: $digest and $watch

$digest() is useful when we want to hook up a vanilla javascript in angularjs.

When you create a data binding from somewhere in your view to a variable on the $scope object, AngularJS creates a "watch" internally. A watch means that AngularJS watches changes in the variable on the $scope object. The framework is "watching" the variable. Watches are created using the $scope.$watch() function


<!DOCTYPE html>
<html lang="en" >
<head>
 <title>$digest,$watch</title>
 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>

 <script type="text/javascript">
  var application=angular.module('myapp',[]);
  application.controller('mycontroller',function($scope)
  {
   $scope.myRandomNumber=Math.random();
   $scope.counter=-1;
   document.querySelector('input').addEventListener('click',function(){
    $scope.myRandomNumber=Math.random();
    $scope.$digest();
    $scope.$watch('myRandomNumber',function(newValue,oldValue)
    {
     if($scope.counter==5)
      alert('You reach at 5');
     $scope.counter++;
    }
    );
   },false);
  }
  );
 </script>
</head>
<body ng-app="myapp" ng-controller="mycontroller">
 {{myRandomNumber}}
 <br/>
 <input type="button" value="Generate Random Number"/>
</body>
</html>


Angular JS Tutorial7: http service and Search Filter

The $http service is a core Angular service that facilitates communication with the remote HTTP servers via the browser's XMLHttpRequest object or via JSONP.

Example :

Create a sample data file 7data.json as below
{
 "customers":[
  {
  "Name":"Steve",
  "Age":"30",
  "Location":"eastleigh"
  },
  {
   "Name":"Ari",
   "Age":"40",
   "Location":"eastleigh"
  },
  {
   "Name":"Clare",
   "Age":"35",
   "Location":"hedgeend"
  },
  {
   "Name":"Stu",
   "Age":"20",
   "Location":"southampton"
  }
   ]
}

7.html:
<!DOCTYPE html>
<html lang="en" >
<head>
 <title>$http,searchFilter</title>
 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
 <script src="7controller.js"></script>
</head>
<body ng-app="myapp">
 <div ng-controller="mycontroller">
  <ul>
   <h2>Customer Details</h2>
   Any Search:<input type="text" ng-model="searchcriteria.$"></br></br>
   Name Search:<input type="text" ng-model="searchcriteria.Name"></br></br>
   Age Search:<input type="text" ng-model="searchcriteria.Age"></br></br>
   Location Search:<input type="text" ng-model="searchcriteria.Location"></br></br></br>
   <li ng-repeat="customer in customerdata|filter:searchcriteria">
  
     {{"Name:"+customer.Name+" Age:"+customer.Age +" Location:"+customer.Location}},
   
   </li>
  </ul>
 </div>
</body>
</html>

7controller.js :
var app=angular.module('myapp',[]);
app.controller('mycontroller',function($scope,$http){
 $http.get('http://localhost:8080/7data.json')
 .success(function(response)
 {
  $scope.customerdata=response.customers;
 }
 );
}
);

Output :



Angular JS Tutorial6: Login page using routeScope,check,resolve,location

We can control login/authorization using routeScope,check,resolve,location.

Example :

6.html :

<!DOCTYPE html>
<html lang="en">
<head>
 <title>routeScope,check,resolve,location</title>
 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
 <script src="angular-route.js"></script>
 <script src="6controller.js"></script>
</head>
<body  ng-app="myapp">
 <div ng-view></div>
</body>
</html>

6controller.js :

var app=angular.module('myapp',['ngRoute']);
app.config(function($routeProvider){
 $routeProvider
 .when('/',{
  templateUrl:'6login.html',
  //template:'Loaded from /'
 })
 .when('/dashboard',{
  resolve:{
   "check":function($location,$rootScope){
    if(!$rootScope.loggedIn)
    {
     $location.path('/');
    }
   }
  },
  templateUrl:'6dashboard.html'
 })
 .otherwise({
  redirectTo:'/'
 });
});
app.controller('loginCtrl',function($scope,$location,$rootScope){
 $scope.submit=function(){
 

  if($scope.username=='Admin' && $scope.password=='Admin'){
   $rootScope.loggedIn=true;
  
   $location.path('/dashboard');
  }
  else{
   alert('wrong credential');
  }
 };
});

6login.html :

<div ng-controller="loginCtrl">
 <form action="/" id="myloginform">
  User Name : <input type="text" ng-model="username" id="username"/><br/>
  Password : <input type="password" ng-model="password" id="password"/>
  <button type="button" ng-click="submit()">Login</button>
 </form>
</div>

6dashboard.html :

Welcome to Dashboard