路由 API
Dojo 路由公开了一个 API,用于生成链接并导航到链接,获取当前路由的参数,并校验路由 id 是否能匹配上。
link(route: string, params: Params = {}): string | undefined
: 基于路由 id 和可选的参数生成一个链接。如果没有传入参数,将尝试使用当前路由的参数,然后再尝试使用路由配置中提供的默认参数。如果无法生成一个链接,则返回undefined
。setPath(path: string): void
: S 设置路由中的路径。get currentParams(): { [string: index]: string }
: 返回当前路由的参数。getRoute(id: string): RouteContext | undefined
: 如果根据路由 id 能够匹配到路由,则返回RouteContext
。如果匹配不到,则返回undefined
。
为路由生成链接
src/routes.ts
export default [
{
id: 'home',
path: 'home',
outlet: 'home'
},
{
id: 'about',
path: 'about',
outlet: 'about-overview',
children: [
{
id: 'about-services',
path: '{services}',
outlet: 'about',
defaultParams: {
services: 'sewing'
}
},
{
id: 'about-company',
path: 'company',
outlet: 'about'
},
{
id: 'about-history',
path: 'history',
outlet: 'about'
}
]
}
];
src/main.ts
import Router from '@dojo/framework/routing/Router';
import routes from './routes';
const router = new Router(routes);
// returns `#home`
console.log(router.link('home'));
// returns `#about`
console.log(router.link('about-overview'));
// returns `#about/company`
console.log(router.link('about-company'));
// returns `#about/history`
console.log(router.link('about-history'));
// returns `#about/knitting`
console.log(router.link('about-services'), { services: 'knitting' });
// Uses the current URL then default params to returns `#about/knitting`
// when the current route is `#about/cooking` returns `#about/cooking`
// when the current route does not contain the params returns `#about/sewing`
console.log(router.link('about-services'));
// returns `undefined` for an unknown route
console.log(router.link('unknown'));
更改路由
import Router from '@dojo/framework/routing/Router';
import routes from './routes';
const router = new Router(routes);
// goto `#home` route
router.setPath('#home');
获取当前参数
import Router from '@dojo/framework/routing/Router';
import routes from './routes';
const router = new Router(routes);
// returns the current params for the route
const params = router.currentParams;
获取匹配到的路由
如果根据路由 id 能够匹配到路由,则 getRoute
返回匹配到 RouteContext
;如果匹配不到,则返回 undefined
。
RouteContext
:
id: string
: 路由 idoutlet: string
: outlet idqueryParams: { [index: string]: string }
: 匹配到路由的查询参数。params: { [index: string]: string }
: 匹配到路由的路径参数。isExact(): boolean
: 一个函数,指明路由是否与路径完全匹配。isError(): boolean
: 一个函数,指明路由是否与路径匹配错误。type: 'index' | 'partial' | 'error'
: 路由的匹配类型,值为index
、partial
或error
。
import Router from '@dojo/framework/routing/Router';
import routes from './routes';
const router = new Router(routes);
// returns the route context if the `home` route is matched, otherwise `undefined`
const routeContext = router.getRoute('home');