aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Ruiz de Villa2012-12-11 11:41:53 +0100
committerIgor Minar2012-12-14 01:16:07 +0100
commit4c6b4447dba9b9027ddf14eae548f7ea0ef6f900 (patch)
treee9974efd10f4cf609243d28da09873e77be35f39
parent741a37b3389e2c129ddb807f10ccc7b69b4140be (diff)
downloadangular.js-4c6b4447dba9b9027ddf14eae548f7ea0ef6f900.tar.bz2
fix($route): correctly extract $routeParams from urls
Routes like '/bar/foovalue/barvalue' matching '/bar/:foo/:bar' now are well mapped in $routeParams to: {bar:'barvalue', foo:'foovalue'} Closes: #1501 Signed-off-by: Gonzalo Ruiz de Villa <gonzaloruizdevilla@gmail.com>
-rw-r--r--src/ng/route.js8
-rw-r--r--test/ng/routeParamsSpec.js12
2 files changed, 16 insertions, 4 deletions
diff --git a/src/ng/route.js b/src/ng/route.js
index e2a9c633..361b8ac3 100644
--- a/src/ng/route.js
+++ b/src/ng/route.js
@@ -321,12 +321,12 @@ function $RouteProvider(){
var regex = '^' + when.replace(/([\.\\\(\)\^\$])/g, "\\$1") + '$',
params = [],
dst = {};
- forEach(when.split(/\W/), function(param) {
- if (param) {
- var paramRegExp = new RegExp(":" + param + "([\\W])");
+ forEach(when.split(/[^\w:]/), function(param) {
+ if (param && param.charAt(0) === ':') {
+ var paramRegExp = new RegExp(param + "([\\W])");
if (regex.match(paramRegExp)) {
regex = regex.replace(paramRegExp, "([^\\/]*)$1");
- params.push(param);
+ params.push(param.substr(1));
}
}
});
diff --git a/test/ng/routeParamsSpec.js b/test/ng/routeParamsSpec.js
index e3aac1a2..07c6d4f7 100644
--- a/test/ng/routeParamsSpec.js
+++ b/test/ng/routeParamsSpec.js
@@ -17,4 +17,16 @@ describe('$routeParams', function() {
expect($routeParams).toEqual({barId:'123', x:'abc'});
});
});
+
+ it('should correctly extract the params when a param name is part of the route', function() {
+ module(function($routeProvider) {
+ $routeProvider.when('/bar/:foo/:bar', {});
+ });
+
+ inject(function($rootScope, $route, $location, $routeParams) {
+ $location.path('/bar/foovalue/barvalue');
+ $rootScope.$digest();
+ expect($routeParams).toEqual({bar:'barvalue', foo:'foovalue'});
+ });
+ });
});