如何在 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',
}