我在Blazor wasm中有一个主-详细页面:一个包含项目列表的左侧面板和一个包含所选项目的右侧面板.
一个示例(ASCII生成here),其中 Select 了项目2:
MASTER DETAIL
+--------------------+----------------------------------------+
| item 1 | |
| | |
| | item 2 |
+--------------------+ |
|░░░░░░░░░░░░░░░░░░░░| |
|░item 2░░░░░░░░░░░░░| |
|░░░░░░░░░░░░░░░░░░░░| |
|░░░░░░░░░░░░░░░░░░░░| |
+--------------------+ |
| item 3 | |
| | |
| | |
+--------------------+ |
| item 4 | |
| | |
| | |
+--------------------+----------------------------------------+
https://www.example.com/items/2
URL:
-
/items
表示显示不带选定内容的项目的页面 -
/items/2
,用于显示选中了项目2的项目的页面
我成功地做到了这一切,使用了以下方法:
- 该页面有一个
<Master />
组件(左)和一个<Detail Id=_selectedId />
组件(右) - 当在主组件(左侧)中单击项时,它会引发一个带有
Id
- 页面处理该事件,并将id传递给详图构件(右)
- 详图构件(右侧)显示新项目
我还希望浏览器的位置从/items
更新到/items/2
,所以我使用了:NavigationManager.NavigateTo("/items/" + id)
.But that reloads all components.
解决方法:
- 我还没有找到一种在不重新加载页面的情况下更新浏览器位置的方法(尽管我可以用Java脚本来做到这一点).即使这是可能的,我也不确定这是一个好方法.
- 我可以使用查询字符串参数
/items?id=10
,然后NavigationManager
将(我认为)避免重新呈现-但我不能使用这种方法,它必须是URI的一部分.
在Blazor中处理主-细节导航的推荐方式是什么?