javascript - Blazor - 路由后保持渲染
问题描述
我有一个Blazor
( web-assembly
) 页面,其中有一个 map( Leaflet
) ,上面有大量加载的项目。当用户移动到另一个页面然后返回到地图页面(路由未重新加载)时,地图div
元素被清除,我必须再次用项目填充地图。是否有可能以某种方式将这些项目保留在地图(内存)上,因此当用户返回时不需要重绘MapPage
?
当前情景:
- 用户转到MapPage
OnAfterRenderAsync
通过javascript调用方法在地图上加载了这么多项目- 用户转到另一个页面
- 用户返回MapPage
- MapPage 组件
cleared
现在应该重新渲染 - 页面将再次呈现 地图上再次加载了如此多的项目(第 2 步)
我想要的是 :
- 用户转到MapPage
- 如此多的项目通过OnAfterRenderAsync方法中的 javascript 调用加载到地图上
- 用户转到另一个页面
- 用户返回MapPage
- MapPage将从内存和步骤 2 中的所有内容加载
这是我的 MapPage 代码:
protected async override Task OnAfterRenderAsync(bool firstRender)
{
await js.InvokeVoidAsync("showMapItems");
await base.OnAfterRenderAsync(firstRender);
}
更新(赏金): 假设页面正在加载位置并在地图上显示它们。如果用户单击每个位置,他应该被重定向到详细信息页面,他将返回搜索页面。
哈克解决方案:我决定通过设置地图来隐藏地图display:none
并显示细节组件。但是我希望也可以通过 URL 访问详细信息,并且当用户单击地图上的详细信息时,应该更改 URL。所以我使用了以下路线,但在加载页面时出现错误:
@page "/location/search"
@page "/location/search#{LocationId:int}"
@code{
[Parameter] public string LocationId { get; set; }
}
我在浏览器中收到以下错误:
无效的模板“位置/搜索#{*LocationId}”。参数段“search#{*LocationId}”中缺少“{”。
解决方案
推荐阅读
- javascript - 比较 RRule 字符串是否重叠
- telegram - 为什么有些电报频道使用名称而其他不使用?
- reactjs - 如何在没有 npm install 的情况下从 github 运行 react 项目
- angular - 如何在 Angular 中保存购物车?
- c# - 如何将具有字段的对象存储为数据库 SQL 的字符串列表
- javascript - 在安装 npm 包时出现 ETIMEDOUT 错误?
- ios - 我可以阻止 iOS 模拟器在构建时更改我的应用程序的 guid 吗?
- javascript - React-bootstrap 侧边栏
- sql - INSERT INTO 具有不同的列数
- php - 我想在索引的基础上在 PHP 中创建一个数值数组的键值对