aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/content/guide/dev_guide.services.injecting_controllers.ngdoc4
-rw-r--r--docs/content/guide/dev_guide.templates.filters.creating_filters.ngdoc40
-rw-r--r--docs/src/templates/doc_widgets.js19
-rw-r--r--src/Injector.js19
-rw-r--r--src/directives.js9
-rw-r--r--src/service/compiler.js12
-rw-r--r--test/directivesSpec.js13
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;
- }));
- });
});