Angular decorate

15
$PROVIDE .DECORATOR() MODIFYING THE BEHAVIOR OF ANGULARJS' CORE SERVICES

description

Use AngularJS' decorate function with ease

Transcript of Angular decorate

Page 1: Angular decorate

$PROVIDE.DECORATOR()

MODIFYING THE BEHAVIOROF ANGULARJS' CORE SERVICES

Page 2: Angular decorate

DAMIEN KLINNERTSoftware Engineer at Small-Improvements

damienklinnert.comtwitter.com/damienklinnertgithub.com/damienklinnert

Page 3: Angular decorate

THE DECORATOR PATTERN

Page 4: Angular decorate
Page 5: Angular decorate

THE COMPLEX WAYangular.module(moduleName, []) .config(function ($provide) { $provide.decorator(serviceName, function ($delegate) {

// modify behavior here

return $delegate; }); });

Page 6: Angular decorate

THE SIMPLE WAYangular.module(moduleName, []) .decorate(serviceName, function ($delegate) {

// modify behavior here

return $delegate; });

www.github.com/damienklinnert/angular-decorate

Page 7: Angular decorate

ONEAPPEND FILE EXTENSION IN

$TEMPLATECACHE.GET()

Page 8: Angular decorate

What you have is:<div ng-include="'views/custom-template.html'"></div>

What you want is:<div ng-include="'views/custom-template'"></div>

Page 9: Angular decorate

// Decorator definitionangular.module('$templateCache+get', ['ng']) .decorate('$templateCache', function ($delegate) { var _get = $delegate.get; $delegate.get = function (key) { return _get.call(_get, key + ".html"); }; return $delegate; });

// Use decorator in whole appangular.module('app', ['$templateCache+get', ...])

Page 10: Angular decorate

TWOADD BASEURL TO EACH

$RESOURCE

Page 11: Angular decorate

Make this possible:var users = $resource('http://localhost/users');console.log(users.baseUrl); // this is new

Page 12: Angular decorate

// Decorator definitionangular.module("$resource+baseUrl", ['ngResource']) .decorate('$resource', function ($delegate) { return function (baseUrl) { var ret = $delegate.apply(this, arguments);

ret.baseUrl = baseUrl;

return ret; }; });

// Use decorator in whole appangular.module('app', ['$resource+baseUrl', ...])

Page 13: Angular decorate

THREEINSTRUMENT ANGULAR

PERFORMANCE

Page 14: Angular decorate

What can you do with this?angular.module('$rootScope+instrument', []).decorate('$rootScope', function ($delegate) {

$delegate.__proto__.$watch = function () { ... }; $delegate.__proto__.$apply = function () { ... };

return $delegate;});

Page 15: Angular decorate

THANK YOURELATED MATERIAL

angular-decorate www.github.com/damienklinnert/angular-decorateHacking Core Directives in AngularJS http://briantford.com/blog/angular-hacking-core.htmlAngular $provide http://docs.angularjs.org/api/auto/object/$provide