Angular decorate

Post on 27-Aug-2014

3.114 views 6 download

Tags:

description

Use AngularJS' decorate function with ease

Transcript of Angular decorate

$PROVIDE.DECORATOR()

MODIFYING THE BEHAVIOROF ANGULARJS' CORE SERVICES

DAMIEN KLINNERTSoftware Engineer at Small-Improvements

damienklinnert.comtwitter.com/damienklinnertgithub.com/damienklinnert

THE DECORATOR PATTERN

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

// modify behavior here

return $delegate; }); });

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

// modify behavior here

return $delegate; });

www.github.com/damienklinnert/angular-decorate

ONEAPPEND FILE EXTENSION IN

$TEMPLATECACHE.GET()

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

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

// 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', ...])

TWOADD BASEURL TO EACH

$RESOURCE

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

// 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', ...])

THREEINSTRUMENT ANGULAR

PERFORMANCE

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

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

return $delegate;});

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