diff options
| author | Misko Hevery | 2011-11-14 15:58:40 -0800 |
|---|---|---|
| committer | Misko Hevery | 2011-11-14 20:31:21 -0800 |
| commit | 8adae2fdf272f3fa428cc9fe43c860c02b2d85fd (patch) | |
| tree | bbfa04ebaa99fcb4f7dddd4a320b8dfe55e6c298 | |
| parent | 955551141de88f15760e3e6e8cb8503ee34b6f6e (diff) | |
| download | angular.js-8adae2fdf272f3fa428cc9fe43c860c02b2d85fd.tar.bz2 | |
refactor(injector): removed loadModule/ng:module
- added module property to doc:example
| -rw-r--r-- | docs/content/guide/dev_guide.services.injecting_controllers.ngdoc | 4 | ||||
| -rw-r--r-- | docs/content/guide/dev_guide.templates.filters.creating_filters.ngdoc | 40 | ||||
| -rw-r--r-- | docs/src/templates/doc_widgets.js | 19 | ||||
| -rw-r--r-- | src/Injector.js | 19 | ||||
| -rw-r--r-- | src/directives.js | 9 | ||||
| -rw-r--r-- | src/service/compiler.js | 12 | ||||
| -rw-r--r-- | test/directivesSpec.js | 13 |
7 files changed, 46 insertions, 70 deletions
diff --git a/docs/content/guide/dev_guide.services.injecting_controllers.ngdoc b/docs/content/guide/dev_guide.services.injecting_controllers.ngdoc index 4b031860..c01b04b1 100644 --- a/docs/content/guide/dev_guide.services.injecting_controllers.ngdoc +++ b/docs/content/guide/dev_guide.services.injecting_controllers.ngdoc @@ -28,7 +28,7 @@ this.secondMethod = function() { myController.$inject = ['$location', '$log']; </pre> -<doc:example> +<doc:example module="MyServiceModule"> <doc:source> <script type="text/javascript"> angular.module.MyServiceModule = ['$provide', function($provide){ @@ -53,7 +53,7 @@ function myController(notifyService) { myController.$inject = ['notify']; </script> -<div ng:controller="myController" ng:module="MyServiceModule"> +<div ng:controller="myController"> <p>Let's try this simple notify service, injected into the controller...</p> <input ng:init="message='test'" type="text" ng:model="message" /> <button ng:click="callNotify(message);">NOTIFY</button> diff --git a/docs/content/guide/dev_guide.templates.filters.creating_filters.ngdoc b/docs/content/guide/dev_guide.templates.filters.creating_filters.ngdoc index 92c749f7..a8fd2ce7 100644 --- a/docs/content/guide/dev_guide.templates.filters.creating_filters.ngdoc +++ b/docs/content/guide/dev_guide.templates.filters.creating_filters.ngdoc @@ -16,31 +16,31 @@ filter to manipulate the DOM. The following sample filter reverses a text string. In addition, it conditionally makes the text upper-case and assigns color. -<doc:example> +<doc:example module="MyReverseModule"> <doc:source> <script type="text/javascript"> -angular.module.MyReverseModule = function MyModule($filterProvider) { - $filterProvider.register('reverse', function() { - return function(input, uppercase) { - var out = ""; - for (var i = 0; i < input.length; i++) { - out = input.charAt(i) + out; - } - // conditional based on optional argument - if (uppercase) { - out = out.toUpperCase(); - } - return out; - } - }); -} + angular.module.MyReverseModule = function ($filterProvider) { + $filterProvider.register('reverse', function() { + return function(input, uppercase) { + var out = ""; + for (var i = 0; i < input.length; i++) { + out = input.charAt(i) + out; + } + // conditional based on optional argument + if (uppercase) { + out = out.toUpperCase(); + } + return out; + } + }); + } - function Ctrl() { - this.greeting = 'hello'; - } + function Ctrl() { + this.greeting = 'hello'; + } </script> -<div ng:controller="Ctrl" ng:module="MyReverseModule"> +<div ng:controller="Ctrl"> <input ng:model="greeting" type="greeting"><br> No filter: {{greeting}}<br> Reverse: {{greeting|reverse}}<br> diff --git a/docs/src/templates/doc_widgets.js b/docs/src/templates/doc_widgets.js index 56ef5bcf..eb8f36f6 100644 --- a/docs/src/templates/doc_widgets.js +++ b/docs/src/templates/doc_widgets.js @@ -15,14 +15,15 @@ var HTML_TEMPLATE = '<!doctype html>\n' + '<html xmlns:ng="http://angularjs.org">\n' + - ' <script src="' + angularJsUrl + '" ng:autobind></script>\n' + + ' <script src="' + angularJsUrl + '" ng:autobind_MODULE_></script>\n' + ' <body>\n' + '_HTML_SOURCE_\n' + ' </body>\n' + '</html>'; - angular.widget('doc:example', function(element){ + angular.widget('doc:example', ['$injector', '$element', function($injector, element){ this.descend(true); //compile the example code + var module = element.attr('module'); //jQuery find() methods in this widget contain primitive selectors on purpose so that we can use //jqlite instead. jqlite's find() method currently supports onlt getElementsByTagName! @@ -59,7 +60,10 @@ '</ul>'; var tabs = angular.element(tabHtml); - tabs.find('li').eq(1).find('pre').text(HTML_TEMPLATE.replace('_HTML_SOURCE_', code.html)); + tabs.find('li').eq(1).find('pre').text( + HTML_TEMPLATE. + replace('_HTML_SOURCE_', code.html). + replace('_MODULE_', (module ? (' ng:module="' + module + '"') : ''))); element.html(''); element.append(tabs); @@ -76,6 +80,11 @@ alert(e); } + if (module) { + $injector.invoke(null, angular.module[module]); + } + + function jsFiddleButton(jsfiddle) { if (jsfiddle !== 'false') { if(jsfiddle === true) { @@ -100,7 +109,7 @@ '</textarea>' + '<input type="text" name="title" value="AngularJS Live Example">' + '<textarea name="html">' + - '<script src="' + angularJsUrl + '" ng:autobind></script>\n\n' + + '<script src="' + angularJsUrl + '" ng:autobind' + (module ? (' ng:module="' + module + '"') : '') + '></script>\n\n' + '<!-- AngularJS Example Code: -->\n\n' + fiddleSrc + '</textarea>' + @@ -116,7 +125,7 @@ } return ''; } - }); + }]); function indent(text) { if (!text) return text; diff --git a/src/Injector.js b/src/Injector.js index 1db79eb8..8df47306 100644 --- a/src/Injector.js +++ b/src/Injector.js @@ -140,21 +140,6 @@ function inferInjectionArgs(fn) { * @return new instance of `Type`. */ -/** - * @ngdoc method - * @name angular.module.AUTO.$injector#loadModule - * @methodOf angular.module.AUTO.$injector - * @description - * Load additional modules into the current injector configuration - * - * @param {Array} modules An array of modules, where module is a: - * - * - `string`: look up the module function from {@link angular.module} and then treat as `function`. - * - `function`: execute the module configuration function using - * {@link angular.module.AUTO.$injector#invoke $injector.invoke()} - */ - - /** * @ngdoc object @@ -255,15 +240,13 @@ function inferInjectionArgs(fn) { function createInjector(modulesToLoad, moduleRegistry) { var cache = {}, providerSuffix = 'Provider', - providerSuffixLength = providerSuffix.length, path = [], $injector; value('$injector', $injector = { get: getService, invoke: invoke, - instantiate: instantiate, - loadModule: loadModule + instantiate: instantiate }); value('$provide', { service: service, diff --git a/src/directives.js b/src/directives.js index f508d40b..da540df5 100644 --- a/src/directives.js +++ b/src/directives.js @@ -887,12 +887,3 @@ angularDirective("ng:cloak", function(expression, element) { element.removeAttr('ng:cloak'); element.removeClass('ng-cloak'); }); - -angularDirective('ng:module', ['$value', '$injector', - function(modules, $injector) { - forEach(modules.split(','), function(module){ - if (module = trim(module)) { - $injector.loadModule(module); - } - }); -}]); diff --git a/src/service/compiler.js b/src/service/compiler.js index 3464a1a0..8a0dca7d 100644 --- a/src/service/compiler.js +++ b/src/service/compiler.js @@ -244,6 +244,7 @@ function $CompileProvider(){ elementName = nodeName_(element), elementNamespace = elementName.indexOf(':') > 0 ? lowercase(elementName).replace(':', '-') : '', template, + locals = {$element: element}, selfApi = { compile: bind(self, self.compile), descend: function(value){ if(isDefined(value)) descend = value; return descend;}, @@ -256,7 +257,10 @@ function $CompileProvider(){ if (!widget) { if ((widget = self.widgets('@' + name))) { element.addClass('ng-attr-widget'); - widget = bind(selfApi, widget, value, element); + if (isFunction(widget) && !widget.$inject) { + widget.$inject = ['$value', '$element']; + } + locals.$value = value; } } }); @@ -264,14 +268,16 @@ function $CompileProvider(){ if ((widget = self.widgets(elementName))) { if (elementNamespace) element.addClass('ng-widget'); - widget = bind(selfApi, widget, element); + if (isFunction(widget) && !widget.$inject) { + widget.$inject = ['$element']; + } } } if (widget) { descend = false; directives = false; var parent = element.parent(); - template.addLinkFn(widget.call(selfApi, element)); + template.addLinkFn($injector.invoke(selfApi, widget, locals)); if (parent && parent[0]) { element = jqLite(parent[0].childNodes[elementIndex]); } diff --git a/test/directivesSpec.js b/test/directivesSpec.js index 3ca60ae4..5f9fa0a8 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -535,17 +535,4 @@ describe("directive", function() { expect(element.hasClass('bar')).toBe(true); })); }); - - describe('ng:module', function() { - it('should install the modules', inject(function($injector, $compile, $rootScope) { - var log = ''; - var injector = $injector; - angular.module.a = function($injector){ log += ($injector == injector) + ';';}; - angular.module.b = function($injector){ log += ($injector == injector); } - $compile('<div ng:module=" a, ,,, b "></div>')($rootScope); - expect(log).toEqual('true;true'); - delete angular.module.a; - delete angular.module.b; - })); - }); }); |
