aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Ruiz de Villa2012-12-11 11:41:53 +0100
committerIgor Minar2012-12-14 01:15:15 +0100
commit30a9da5dc159dd1e19b677914356925c7ebdf632 (patch)
tree794f2f94e7816572bba8c0d147f1621a2c581ff3
parent25e1ad9a9443de6b7ebb40409af72021cc4e7b20 (diff)
downloadangular.js-30a9da5dc159dd1e19b677914356925c7ebdf632.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'});
+ });
+ });
});