dojo dragon main logo

路由 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: 路由 id
  • outlet: string: outlet id
  • queryParams: { [index: string]: string }: 匹配到路由的查询参数。
  • params: { [index: string]: string }: 匹配到路由的路径参数。
  • isExact(): boolean: 一个函数,指明路由是否与路径完全匹配。
  • isError(): boolean: 一个函数,指明路由是否与路径匹配错误。
  • type: 'index' | 'partial' | 'error': 路由的匹配类型,值为 indexpartialerror
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');