You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Apr 12, 2024. It is now read-only.
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.