diff options
| author | Igor Minar | 2011-12-02 19:38:39 -0500 |
|---|---|---|
| committer | Igor Minar | 2011-12-07 09:41:08 -0800 |
| commit | 4e3c05b99e32dad4084637299b3a696f9579957f (patch) | |
| tree | 46bab2c4b3af41090d9c747c6b78a814e06928a3 /src | |
| parent | 5e4d59adf0ba4eb7f993f66b868759c24ae94f4c (diff) | |
| download | angular.js-4e3c05b99e32dad4084637299b3a696f9579957f.tar.bz2 | |
feat(injector): add $provide.decorator
Diffstat (limited to 'src')
| -rw-r--r-- | src/Injector.js | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/Injector.js b/src/Injector.js index 8df47306..517e3e00 100644 --- a/src/Injector.js +++ b/src/Injector.js @@ -251,7 +251,8 @@ function createInjector(modulesToLoad, moduleRegistry) { value('$provide', { service: service, factory: factory, - value: value + value: value, + decorator: decorator }); loadModule(modulesToLoad); @@ -274,6 +275,18 @@ function createInjector(modulesToLoad, moduleRegistry) { function value(name, value) { factory(name, valueFn(value)); } + function decorator(name, decorFn) { + var origProvider = cache['#' + name + providerSuffix]; + if (!origProvider) throw Error("Can't find provider for: " + name); + if (cache['#' + name]) throw Error("Service " + name + " already instantiated, can't decorate!"); + var orig$get = origProvider.$get; + origProvider.$get = function() { + var origInstance = $injector.invoke(origProvider, orig$get); + return $injector.invoke(null, decorFn, {$delegate: origInstance}); + }; + } + + function getService(value) { if (typeof value !== 'string') { throw Error('Service name expected'); |
