From d828664d0c4f4c883657a229d5f594b30f93c392 Mon Sep 17 00:00:00 2001 From: Brian Ford Date: Tue, 7 Jul 2015 13:05:05 -0700 Subject: [PATCH] fix(router): allow generating links with numeric params --- modules/angular2/src/router/path_recognizer.ts | 15 +++++++++++---- .../angular2/test/router/route_recognizer_spec.ts | 4 ++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/angular2/src/router/path_recognizer.ts b/modules/angular2/src/router/path_recognizer.ts index 814014236c..405c640066 100644 --- a/modules/angular2/src/router/path_recognizer.ts +++ b/modules/angular2/src/router/path_recognizer.ts @@ -5,8 +5,7 @@ import { StringWrapper, isPresent, isBlank, - BaseException, - normalizeBlank + BaseException } from 'angular2/src/facade/lang'; import {Promise, PromiseWrapper} from 'angular2/src/facade/async'; import { @@ -29,6 +28,14 @@ export class Segment { regex: string; } +function normalizeString(obj: any): string { + if (isBlank(obj)) { + return null; + } else { + return obj.toString(); + } +} + class ContinuationSegment extends Segment { generate(params): string { return ''; } } @@ -56,7 +63,7 @@ class DynamicSegment { throw new BaseException( `Route generator for '${this.name}' was not included in parameters passed.`); } - return normalizeBlank(StringMapWrapper.get(params, this.name)); + return normalizeString(StringMapWrapper.get(params, this.name)); } } @@ -66,7 +73,7 @@ class StarSegment { constructor(public name: string) {} generate(params: StringMap): string { - return normalizeBlank(StringMapWrapper.get(params, this.name)); + return normalizeString(StringMapWrapper.get(params, this.name)); } } diff --git a/modules/angular2/test/router/route_recognizer_spec.ts b/modules/angular2/test/router/route_recognizer_spec.ts index be5399a6c6..5053d68b56 100644 --- a/modules/angular2/test/router/route_recognizer_spec.ts +++ b/modules/angular2/test/router/route_recognizer_spec.ts @@ -112,6 +112,10 @@ export function main() { expect(recognizer.generate('user', {'name': 'misko'})['url']).toEqual('app/user/misko'); }); + it('should generate URLs with numeric params', () => { + recognizer.addConfig('/app/page/:number', handler, 'page'); + expect(recognizer.generate('page', {'number': 42})['url']).toEqual('app/page/42'); + }); it('should throw in the absence of required params URLs', () => { recognizer.addConfig('app/user/:name', handler, 'user');