Rui*_*ima 6 blazor blazor-webassembly
在开发 Blazor WebAssembly 时,我一直在努力解决几个页面导航问题。
每次我从page1转到page2然后按下浏览器的后退按钮时,page1基本上都会重置,这是因为调用了on_initialized,你们如何在按下浏览器的后退按钮时保持页面的状态?
如果我有一个类似的页面@page '/person/{id}',如果从该页面我有一个类似的链接<NavLink href="/person/person-id-2">Another person</NavLink>。当我点击链接时,我看到 URL 正在更新,但实际页面没有刷新,你们如何解决这个问题?
===编辑===
在 @mrc-aka-shaun-curtis 给出答案后,我回顾了我的代码,为了修复#2,我移动了一些代码。在我有类似的事情之前
protected override async Task OnInitializedAsync()
{
PersonModel = await PersonService.Get<Person>(PersonId);
editContext = new EditContext(PersonModel);
}
Run Code Online (Sandbox Code Playgroud)
我现在将其移至
protected override async Task OnParametersSetAsync()
{
PersonModel = await PersonService.Get<Person>(PersonId);
editContext = new EditContext(PersonModel);
StateHasChanged();
}
Run Code Online (Sandbox Code Playgroud)
这排序#2,我可以<NavLink href="/person/2">Father</NavLink>在组件“人”中拥有一个
问题1 - 你还没有明确第1页和第2页的网址,所以很难回答这个问题。但是,如果“页面”发生更改(即剃刀组件),则会调用页面 1 的完整生命周期。
问题 2 -如果/person/1和/person/2是同一页面@page "/person/{id}"。组件是相同的,只是参数发生了变化。 RouteViewinApp.razor由路由器传递相同的组件,因此仅OnParametersSet{Async}被调用,因为只有参数发生了变化。只有当定义的组件发生RouteData变化时,新组件才会被加载并OnInitialized{Async}在该组件上被调用。
| 归档时间: |
|
| 查看次数: |
5789 次 |
| 最近记录: |