Description
Bug exists on angular 1.5.3 and even on master branch.
In compile.js at the beginning of registerComponent (angular.component) method there is a assignment:
var controller = options.controller || noop;
Some lines later (after factory function definition) the controller variable is modified by assigning component options starting with $ sign.
forEach(options, function(val, key) {
if (key.charAt(0) === '$') {
factory[key] = val;
// Don't try to copy over annotations to named controller
if (isFunction(controller)) controller[key] = val;
}
});
This may modify an angular method noop if component doesn't have a controller, which should not have happened.
How I found it?
I came across this problem using ngComponentRouter 2.0.0 with Angular 1.5.3 when I had two components without controllers defined. In this situation when factory function is executed, the default controller (noop) has $routeConfig property from the later one defined component (because registerComponent modify the same object: noop function). Result: ngComponentRouter couldn't find properly defined route.
Fix proposal
Probably the fix is fairly simple. Use function() {} instead of noop:
var controller = options.controller || function() {};
This will guarantee new function object at any situation.
Description
Bug exists on angular 1.5.3 and even on master branch.
In compile.js at the beginning of registerComponent (angular.component) method there is a assignment:
var controller = options.controller || noop;Some lines later (after factory function definition) the
controllervariable is modified by assigning component options starting with$sign.This may modify an angular method
noopif component doesn't have a controller, which should not have happened.How I found it?
I came across this problem using ngComponentRouter 2.0.0 with Angular 1.5.3 when I had two components without controllers defined. In this situation when factory function is executed, the default controller (noop) has $routeConfig property from the later one defined component (because registerComponent modify the same object:
noopfunction). Result: ngComponentRouter couldn't find properly defined route.Fix proposal
Probably the fix is fairly simple. Use
function() {}instead ofnoop:var controller = options.controller || function() {};This will guarantee new function object at any situation.