feat(router): route redirects
This commit is contained in:
parent
9d5c33f9dd
commit
9153331303
|
@ -6,7 +6,7 @@ import {List, Map} from 'angular2/src/facade/collection';
|
|||
*
|
||||
* Supported keys:
|
||||
* - `path` (required)
|
||||
* - `component` or `components` (requires exactly one of these)
|
||||
* - `component`, `components`, `redirectTo` (requires exactly one of these)
|
||||
* - `as` (optional)
|
||||
*/
|
||||
export class RouteConfig {
|
||||
|
|
|
@ -13,14 +13,14 @@ export class RouteRegistry {
|
|||
}
|
||||
|
||||
config(parentComponent, config) {
|
||||
|
||||
if (!StringMapWrapper.contains(config, 'path')) {
|
||||
throw new BaseException('Route config does not contain "path"');
|
||||
}
|
||||
|
||||
if (!StringMapWrapper.contains(config, 'component') &&
|
||||
!StringMapWrapper.contains(config, 'components')) {
|
||||
throw new BaseException('Route config does not contain "component" or "components"');
|
||||
!StringMapWrapper.contains(config, 'components') &&
|
||||
!StringMapWrapper.contains(config, 'redirectTo')) {
|
||||
throw new BaseException('Route config does not contain "component," "components," or "redirectTo"');
|
||||
}
|
||||
|
||||
var recognizer:RouteRecognizer;
|
||||
|
@ -33,6 +33,11 @@ export class RouteRegistry {
|
|||
|
||||
config = normalizeConfig(config);
|
||||
|
||||
if (StringMapWrapper.contains(config, 'redirectTo')) {
|
||||
recognizer.addRedirect(StringMapWrapper.get(config, 'path'), StringMapWrapper.get(config, 'redirectTo'));
|
||||
return;
|
||||
}
|
||||
|
||||
var components = StringMapWrapper.get(config, 'components');
|
||||
StringMapWrapper.forEach(components, (component, _) => {
|
||||
this.configFromComponent(component);
|
||||
|
@ -152,8 +157,6 @@ function normalizeConfig(config:StringMap) {
|
|||
});
|
||||
|
||||
return newConfig;
|
||||
} else if (!StringMapWrapper.contains(config, 'components')) {
|
||||
throw new BaseException('Config does not include a "component" or "components" key.');
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
|
|
@ -117,6 +117,20 @@ export function main() {
|
|||
}));
|
||||
|
||||
|
||||
it('should work with redirects', inject([AsyncTestCompleter, Location], (async, location) => {
|
||||
compile()
|
||||
.then((_) => rtr.config({'path': '/original', 'redirectTo': '/redirected' }))
|
||||
.then((_) => rtr.config({'path': '/redirected', 'component': A }))
|
||||
.then((_) => rtr.navigate('/original'))
|
||||
.then((_) => {
|
||||
view.detectChanges();
|
||||
expect(view.rootNodes).toHaveText('A');
|
||||
expect(location.urlChanges).toEqual(['/redirected']);
|
||||
async.done();
|
||||
});
|
||||
}));
|
||||
|
||||
|
||||
it('should generate link hrefs', inject([AsyncTestCompleter], (async) => {
|
||||
ctx.name = 'brian';
|
||||
compile('<a href="hello" router-link="user" [router-params]="{name: name}">{{name}}</a>')
|
||||
|
|
Loading…
Reference in New Issue