decorator check

$provide vs .decorator

by Samar Pattanayak

HTML

<div ng-app="myModule">
  <div ng-controller="myController">
  {{title}}
  </div>
</div>

JavaScript

var app= angular.module("myModule",[]);
app.controller("myController", function($scope,myService){
	$scope.title = "Checking Deorator" + " --> " + myService.sayHi() +  myService.autoAdd();
  console.log(myService.fn_config_decorator());
  console.log(myService.autoAdd());
  //console.log(myService.fn_config_decorator());
  
})
app.service("myService", function(){
	this.sayHello = function (){
  	console.log("From service SayHello function");
  };
  this.sayHi= function(){
  	console.log("From service SayHi function");
    return "with Hi function";
  }
})
app.decorator("myService", function($delegate){//runs second
	$delegate.sayHi = function(){
  	return "CHANGED Inside decorator";
  };
  $delegate.autoAdd = function(){
  	return "a new function added in DECORATor";
  }
  //console.log(dec);
  return $delegate;
})
app.config(function($provide){
	$provide.decorator("myService", function($delegate){//runs first
  	$delegate.fn_config_decorator = function(){
    	return "service decorated in CONFIG block"
    }
    return $delegate ;
  })
})
//Like with $provide.decorator, the module.decorator function runs during the config phase of the app. That means you can define a module.decorator before the decorated service is defined.
//If the service has been declared multiple times, a decorator will decorate the service that has been declared last: