如何在 Vaadin Fusion 中使用路由器的 URL 参数?
How to use URL parameters with router in Vaadin Fusion?
我试着按照指南
Question,结果是
mobx.esm.js?4fd9:2362 [mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: 'Reaction[MainView.update()]' TypeError: Expected "item" to be a string
我的配置是
path: 'item/:item',
component: 'item-view',
有没有例子,怎么解决的?我是否需要在 MainView 中处理此问题(我遵循 vaadin.com 上的待办事项教程?
您似乎 运行 遇到了启动器问题。在 main-view.ts
中,它循环遍历带有标题的路线,并尝试为菜单中的每个路线创建一个 link:
${this.getMenuRoutes().map(
(viewRoute) => html`
<vaadin-tab>
<a href="${router.urlForPath(viewRoute.path)}" tabindex="-1">${viewRoute.title}</a>
</vaadin-tab>
`
)}
但是,当有 URL 参数定义而不是实际参数(items/:item
而不是 items/2
)时,router.urlForPath()
会中断。
一个快速解决方法是从您的路由配置中删除具有参数的任何路由的 title
属性。
{
path: 'item/:item',
component: 'item-view'
// make sure there is no title here
}
问题在于起始项目中的 main-view.ts
具有尝试列出所有导航路线以为其生成 link 的逻辑。目前该逻辑不够智能,无法检测和跳过具有非可选路由参数的路由。
当 path
具有非可选路由参数时,从 router.urlForPath(viewRoute.path)
抛出错误,因为这里我们没有指定路由参数的值应该是什么(对于生成的 URL).要为路径 'item/:item'
生成 URL,它需要执行类似 router.urlForPath('item/:item', { item: 'my-item' })
.
的操作
Marcus 建议的快速修复(从路由定义中删除 title
)有效,因为 main-view.ts
具有跳过所有没有 title
的路由的逻辑.您可以更改该逻辑以也按其他一些标准跳过,或者如果您真的想为这些路线生成工作导航 links,您可以尝试在此处包含路线参数的值(对于特定路线)。
另一种方法是将路由参数标记为可选(如果您希望路由也可以在没有参数的情况下访问),方法是在它后面添加一个问号,然后可以生成 link 而无需指定参数的值。
{
path: 'item/:item?', // <- optional route parameter
component: 'item-view',
title: 'Hello World',
}
我试着按照指南 Question,结果是
mobx.esm.js?4fd9:2362 [mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: 'Reaction[MainView.update()]' TypeError: Expected "item" to be a string
我的配置是
path: 'item/:item',
component: 'item-view',
有没有例子,怎么解决的?我是否需要在 MainView 中处理此问题(我遵循 vaadin.com 上的待办事项教程?
您似乎 运行 遇到了启动器问题。在 main-view.ts
中,它循环遍历带有标题的路线,并尝试为菜单中的每个路线创建一个 link:
${this.getMenuRoutes().map(
(viewRoute) => html`
<vaadin-tab>
<a href="${router.urlForPath(viewRoute.path)}" tabindex="-1">${viewRoute.title}</a>
</vaadin-tab>
`
)}
但是,当有 URL 参数定义而不是实际参数(items/:item
而不是 items/2
)时,router.urlForPath()
会中断。
一个快速解决方法是从您的路由配置中删除具有参数的任何路由的 title
属性。
{
path: 'item/:item',
component: 'item-view'
// make sure there is no title here
}
问题在于起始项目中的 main-view.ts
具有尝试列出所有导航路线以为其生成 link 的逻辑。目前该逻辑不够智能,无法检测和跳过具有非可选路由参数的路由。
当 path
具有非可选路由参数时,从 router.urlForPath(viewRoute.path)
抛出错误,因为这里我们没有指定路由参数的值应该是什么(对于生成的 URL).要为路径 'item/:item'
生成 URL,它需要执行类似 router.urlForPath('item/:item', { item: 'my-item' })
.
Marcus 建议的快速修复(从路由定义中删除 title
)有效,因为 main-view.ts
具有跳过所有没有 title
的路由的逻辑.您可以更改该逻辑以也按其他一些标准跳过,或者如果您真的想为这些路线生成工作导航 links,您可以尝试在此处包含路线参数的值(对于特定路线)。
另一种方法是将路由参数标记为可选(如果您希望路由也可以在没有参数的情况下访问),方法是在它后面添加一个问号,然后可以生成 link 而无需指定参数的值。
{
path: 'item/:item?', // <- optional route parameter
component: 'item-view',
title: 'Hello World',
}