Blazor WebAssembly 来回导航初始化

Rui*_*ima 6 blazor blazor-webassembly

在开发 Blazor WebAssembly 时,我一直在努力解决几个页面导航问题。

  1. 每次我从page1转到page2然后按下浏览器的后退按钮时,page1基本上都会重置,这是因为调用了on_initialized,你们如何在按下浏览器的后退按钮时保持页面的状态?

  2. 如果我有一个类似的页面@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>在组件“人”中拥有一个

MrC*_*tis 4

问题1 - 你还没有明确第1页和第2页的网址,所以很难回答这个问题。但是,如果“页面”发生更改(即剃刀组件),则会调用页面 1 的完整生命周期。

问题 2 -如果/person/1/person/2是同一页面@page "/person/{id}"。组件是相同的,只是参数发生了变化。 RouteViewinApp.razor由路由器传递相同的组件,因此仅OnParametersSet{Async}被调用,因为只有参数发生了变化。只有当定义的组件发生RouteData变化时,新组件才会被加载并OnInitialized{Async}在该组件上被调用。