AngularJS Decorate
decorate factory
by Nadeesh Peiris
HTML
<script src="https://code.angularjs.org/1.4.7/angular.min.js"></script>
<div ng-controller="HelloCtrl">
<p>{{text1}}</p>
<p>{{text2}}</p>
</div>
JavaScript
var app = angular.module('myApp', []);
app.factory('decoratorService', function(){
return {}
});
app.factory('testFactory', function(decoratorService){
Player = function(){
this.type = "Taekwondo";
this.level = 1;
this.country = "Sri Lanka";
}
changeType = function(){
return "Wrestling";
}
Player.prototype.changeCountry = function(){
this.country = "Australia";
}
Player.prototype.upgrade = function(){
if(typeof decoratorService.postConstructor === 'function'){
this.level = decoratorService.postConstructor(this.level);
}
}
getPlayer = function(){
var p = new Player();
//console.log(p);
p.upgrade();
p.type = changeType(); // this.changeType() set type to "MMA"
p.changeCountry();
return p;
}
return {
getPlayer: getPlayer,
Player: Player
}
});
app.controller('HelloCtrl', function($scope, testFactory){
var p1 = testFactory.getPlayer();
var p2 = new testFactory.Player();
//p2.changeCountry();
$scope.text1 = "Level "+p1.level+" "+p1.type+" player from "+p1.country;
$scope.text2 = "Level "+p2.level+" "+p2.type+" player from "+p2.country;
});
app.decorator('decoratorService', function($delegate){
$delegate.postConstructor = function(level) {
return level+1;
}
return $delegate;
});
app.decorator('testFactory', function($delegate){
$delegate.changeType = function(){
return "MMA";
}
/*$delegate.Player.prototype.changeCountry = function(){
this.country = "Korea";
}*/
$delegate.Player = function(){
this.type = "Taekwondo";
this.level = 3;
this.country = "USA";
}
return $delegate;
});