From 25a62b58db31c212c330d1bd7ce58bdd031e114a Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Tue, 2 Aug 2011 13:29:12 -0700 Subject: refactor(injection) infer injection args in ng:controller only Because only controllers don't have currying, we can infer its arguments, all other APIs needing currying, automatic inference complicates the matters unecessary. --- src/Compiler.js | 2 -- src/Injector.js | 5 +++-- src/directives.js | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/Compiler.js b/src/Compiler.js index 0001f8af..a355444b 100644 --- a/src/Compiler.js +++ b/src/Compiler.js @@ -40,8 +40,6 @@ Template.prototype = { addLinkFn:function(linkingFn) { if (linkingFn) { - if (!linkingFn.$inject) - linkingFn.$inject = []; this.linkFns.push(linkingFn); } }, diff --git a/src/Injector.js b/src/Injector.js index 912e911c..0e0fddf6 100644 --- a/src/Injector.js +++ b/src/Injector.js @@ -60,6 +60,7 @@ function createInjector(factoryScope, factories, instanceCache) { if (!(value in instanceCache)) { var factory = factories[value]; if (!factory) throw Error("Unknown provider for '"+value+"'."); + inferInjectionArgs(factory); instanceCache[value] = invoke(factoryScope, factory); } return instanceCache[value]; @@ -67,7 +68,7 @@ function createInjector(factoryScope, factories, instanceCache) { function invoke(self, fn, args){ args = args || []; - var injectNames = injectionArgs(fn); + var injectNames = fn.$inject || []; var i = injectNames.length; while(i--) { args.unshift(injector(injectNames[i])); @@ -133,7 +134,7 @@ var FN_ARGS = /^function\s*[^\(]*\(([^\)]*)\)/m; var FN_ARG_SPLIT = /,/; var FN_ARG = /^\s*(.+?)\s*$/; var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -function injectionArgs(fn) { +function inferInjectionArgs(fn) { assertArgFn(fn); if (!fn.$inject) { var args = fn.$inject = []; diff --git a/src/directives.js b/src/directives.js index 4e2b92d4..ca9fe4fc 100644 --- a/src/directives.js +++ b/src/directives.js @@ -174,6 +174,7 @@ angularDirective("ng:controller", function(expression){ getter(scope, expression, true) || getter(window, expression, true); assertArgFn(Controller, expression); + inferInjectionArgs(Controller); return Controller; }); return noop; -- cgit v1.2.3