Skip to content

Commit ac7cb65

Browse files
author
Kent C. Dodds
committedMay 2, 2015
PROOF OF CONCEPT angular#11775, DO NOT MERGE
1 parent 1268b17 commit ac7cb65

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed
 

‎src/auto/injector.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -722,22 +722,23 @@ function createInjector(modulesToLoad, strictDi) {
722722
if (loadedModules.get(module)) return;
723723
loadedModules.put(module, true);
724724

725-
function runInvokeQueue(queue) {
725+
function runInvokeQueue(queue, moduleFn) {
726726
var i, ii;
727727
for (i = 0, ii = queue.length; i < ii; i++) {
728728
var invokeArgs = queue[i],
729729
provider = providerInjector.get(invokeArgs[0]);
730-
731-
provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
730+
var args = Array.prototype.slice.call(invokeArgs[2]);
731+
args.push(moduleFn); // add the module function here
732+
provider[invokeArgs[1]].apply(provider, args);
732733
}
733734
}
734735

735736
try {
736737
if (isString(module)) {
737738
moduleFn = angularModule(module);
738739
runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
739-
runInvokeQueue(moduleFn._invokeQueue);
740-
runInvokeQueue(moduleFn._configBlocks);
740+
runInvokeQueue(moduleFn._invokeQueue, moduleFn);
741+
runInvokeQueue(moduleFn._configBlocks, moduleFn);
741742
} else if (isFunction(module)) {
742743
runBlocks.push(providerInjector.invoke(module));
743744
} else if (isArray(module)) {

‎src/ng/compile.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -819,7 +819,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
819819
* {@link guide/directive} for more info.
820820
* @returns {ng.$compileProvider} Self for chaining.
821821
*/
822-
this.directive = function registerDirective(name, directiveFactory) {
822+
this.directive = function registerDirective(name, directiveFactory, ngModule) {
823823
assertNotHasOwnProperty(name, 'directive');
824824
if (isString(name)) {
825825
assertValidDirectiveName(name);
@@ -837,6 +837,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
837837
} else if (!directive.compile && directive.link) {
838838
directive.compile = valueFn(directive.link);
839839
}
840+
directive.ngModule = ngModule;
840841
directive.priority = directive.priority || 0;
841842
directive.index = index;
842843
directive.name = directive.name || name;
@@ -2299,7 +2300,15 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
22992300
function assertNoDuplicate(what, previousDirective, directive, element) {
23002301
if (previousDirective) {
23012302
throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',
2302-
previousDirective.name, directive.name, what, startingTag(element));
2303+
getDirectiveLabel(previousDirective), getDirectiveLabel(directive), what, startingTag(element));
2304+
}
2305+
2306+
function getDirectiveLabel(dir) {
2307+
if (dir.ngModule) {
2308+
return dir.name + ' (module: ' + dir.ngModule.name + ')';
2309+
} else {
2310+
return dir.name;
2311+
}
23032312
}
23042313
}
23052314

‎test/ng/compileSpec.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -2113,6 +2113,7 @@ describe('$compile', function() {
21132113
var iscope;
21142114

21152115
beforeEach(module(function() {
2116+
var fakeModule = {name: 'fakeModule'};
21162117
forEach(['', 'a', 'b'], function(name) {
21172118
directive('scope' + uppercase(name), function(log) {
21182119
return {
@@ -2125,7 +2126,7 @@ describe('$compile', function() {
21252126
}};
21262127
}
21272128
};
2128-
});
2129+
}, fakeModule);
21292130
directive('iscope' + uppercase(name), function(log) {
21302131
return {
21312132
scope: {},
@@ -2138,7 +2139,7 @@ describe('$compile', function() {
21382139
};
21392140
}
21402141
};
2141-
});
2142+
}, fakeModule);
21422143
directive('tscope' + uppercase(name), function(log) {
21432144
return {
21442145
scope: true,
@@ -2320,7 +2321,7 @@ describe('$compile', function() {
23202321
function($rootScope, $compile) {
23212322
expect(function() {
23222323
$compile('<div class="iscope-a; scope-b"></div>');
2323-
}).toThrowMinErr('$compile', 'multidir', 'Multiple directives [iscopeA, scopeB] asking for new/isolated scope on: ' +
2324+
}).toThrowMinErr('$compile', 'multidir', 'Multiple directives [iscopeA (module: fakeModule), scopeB (module: fakeModule)] asking for new/isolated scope on: ' +
23242325
'<div class="iscope-a; scope-b">');
23252326
})
23262327
);

0 commit comments

Comments
 (0)
Please sign in to comment.