Skip to content

Commit e0a36c1

Browse files
committed
bug(ngRoute): allow proto inherited properties in route params object
copy route params with angular.copy before using angular.extend which looks only for enumerable own properties Closes angular#8181
1 parent 52ceec2 commit e0a36c1

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/ngRoute/route.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,13 @@ function $RouteProvider(){
141141
* Adds a new route definition to the `$route` service.
142142
*/
143143
this.when = function(path, route) {
144+
var routeCopy = angular.copy(route);
145+
if (angular.isUndefined(routeCopy.reloadOnSearch)) {
146+
routeCopy.reloadOnSearch = true;
147+
}
144148
routes[path] = angular.extend(
145-
{reloadOnSearch: true},
146-
route,
147-
path && pathRegExp(path, route)
149+
routeCopy,
150+
path && pathRegExp(path, routeCopy)
148151
);
149152

150153
// create redirection for trailing slashes
@@ -155,7 +158,7 @@ function $RouteProvider(){
155158

156159
routes[redirectPath] = angular.extend(
157160
{redirectTo: path},
158-
pathRegExp(redirectPath, route)
161+
pathRegExp(redirectPath, routeCopy)
159162
);
160163
}
161164

test/ngRoute/routeSpec.js

+17
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,23 @@ describe('$route', function() {
294294
$rootScope.$digest();
295295
expect($route.current).toBeDefined();
296296
}));
297+
298+
it("should use route params inherited from prototype chain", function() {
299+
var BaseRoute = function BaseRoute() {
300+
BaseRoute.prototype.templateUrl = 'foo.html';
301+
};
302+
var route = new BaseRoute();
303+
304+
module(function($routeProvider) {
305+
$routeProvider.when('/foo', route);
306+
});
307+
308+
inject(function($route, $location, $rootScope) {
309+
$location.path('/foo');
310+
$rootScope.$digest();
311+
expect($route.current.templateUrl).toBe('foo.html');
312+
});
313+
});
297314
});
298315

299316

0 commit comments

Comments
 (0)