考虑(摘自AngularDart 教程):
router.root
..addRoute(
name: 'add',
path: '/add',
enter: view('view/addRecipe.html'))
URL 如何与这样的路径匹配?是否有隐含的通配符后缀 like /add/*
or maybe /add*
?如果是这样,我怎样才能/add
完全匹配/add
以避免与例如冲突 /address
?
考虑(摘自AngularDart 教程):
router.root
..addRoute(
name: 'add',
path: '/add',
enter: view('view/addRecipe.html'))
URL 如何与这样的路径匹配?是否有隐含的通配符后缀 like /add/*
or maybe /add*
?如果是这样,我怎样才能/add
完全匹配/add
以避免与例如冲突 /address
?
正确,UrlTemplate
天真的前缀匹配,所以/add
会匹配/address
.
如果您担心两条路径之间的冲突,其中一条路径恰好是另一条路径的前缀,那么正确的方法是将最具体的路径放在首位。例如:
router.root
..addRoute(
name: 'address',
path: '/address',
enter: view('view/address.html'))
..addRoute(
name: 'add',
path: '/add',
enter: view('view/addRecipe.html'))
路由器按照指定的顺序匹配路由,所以它会选择第一个匹配的。这种方式/address
将始终匹配address
路由并且/add
将始终匹配add
路由。
如果您担心/addFoo
to/add
的意外匹配,目前恐怕没有简单的方法可以确保这一点。如果您对此感觉强烈,请针对 route_hierarchical 包提交功能请求。
如果您查看源代码(route_hierarchial 包中的 client.dart,AngularDart 又使用它),您会注意到路径被用作地图的键。这意味着如果您的路径设置为/add
它不会匹配/address
。