- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 Blazor WebAssembly 应用程序,其中包含一个列表和一个编辑页面。
当我查看实体列表并单击其中一个进行编辑时,使用 NavLink 组件,浏览器会导航到“编辑”页面,显示我的 Loader 组件,直到加载页面。
效果很好。
当我在“编辑”页面上单击“保存”时,如果成功,我将导航回“列表”页面。
private async Task OnValidSubmitAsync()
{
this.IsBusy = true;
var @event =
await this.EventService.UpdateByIdAsync(
this.Id,
this.EventUpdateOptions);
this.IsBusy = false;
this.NavigationManager.NavigateTo($"/teams/{this.Event.Team.Id}/events");
}
我期望发生的是它会导航到列表页面,再次显示我的加载器组件,然后渲染列表页面。
但是会发生什么,它停留在“编辑”页面上,直到呈现“列表”页面,我从未看到我的 Loader 组件,并且对于用户来说,它看起来就像只是卡在“编辑”页面上。
解决方法是在保存完实体后在 OnValidateSubmitAsync
中显示我的加载器。
我是 Blazor 新手,仍在缩短页面生命周期,因此我的方法可能不正确。只是对这里发生的事情有点困惑,以及是否有办法强制列表页面与加载程序一起显示。
希望这是有道理的。 😊
最佳答案
根据您对 @enet 答案的评论,一个可能的答案是您的列表加载页面永远不会破坏 UI 线程中的列表加载逻辑,因此本质上一切仍然同步运行。如果是这种情况,有两种简单的方法可以解决此问题。
方法一
您可以使用 OnInitializedAsync
重写在页面加载时加载列表。重要的是,您需要在加载列表之前在方法中执行一些操作,这将导致运行时构建任务延续并将控制权返回给 UI 线程,以及 Task.Delay();
效果很好。所以你的方法看起来像这样:
protected override async Task OnInitializedAsync()
{
// await the delay, breaks the UI thread free from following logic
await Task.Delay(1);
// Populate your list with a background task that you await
// Assumes you already have the list initialized and just need values
ListValues = await Someservice.GetListValuesAsync();
// You may not need this call, but if so you might need to invoke it async
// Doing so will synchronize back to the UI thread
await InvokeAsync(StateHasChanged);
}
方法2
您可以使用 OnAfterRenderAsync
重写来加载数据。关键点是您将初始 UI 状态设置为将加载组件显示为默认操作,然后使用如下方法:
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
ListValues = await Someservice.GetListValuesAsync();
// Since you awaited the list population, now you can update UI
MethodToSwitchUiToListView();
// this may be needed as well
await InvokeAsync(StateHasChanged);
}
}
相对于方法 1,我更喜欢使用方法 2,因为它允许我构建非常简单的 UI 来表示加载状态,然后并行加载多个部分并在数据可用时切换 UI。其次,在 Blazor Server 中(这似乎不适用于您的情况),OnInitializedAsync 方法被调用两次,但 OnAfterRender 只被调用一次。但无论哪种方式都应该有效。
请告诉我这是否有帮助。
附注- NavigationManager.NavigateTo()
方法还采用可选的第二个 bool 值参数,以强制加载页面。如果设置为true
,它将强制强制重新加载和刷新。如果您还没有尝试的话,我鼓励您尝试一下,因为导航回当前页面可能会很有用。一个例子是复杂的表单重置之类的事情,从头开始比尝试到处反转状态更有意义,而且我遇到过一些令人沮丧的情况,这些情况都是用简单的第二个参数解决的。这可能对您的情况也有帮助。
关于blazor - NavigateTo 不立即显示新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62405916/
我有 Blazor WebAssembly 应用程序,其中包含一个列表和一个编辑页面。 当我查看实体列表并单击其中一个进行编辑时,使用 NavLink 组件,浏览器会导航到“编辑”页面,显示我的 Lo
我有 Blazor WebAssembly 应用程序,其中包含一个列表和一个编辑页面。 当我查看实体列表并单击其中一个进行编辑时,使用 NavLink 组件,浏览器会导航到“编辑”页面,显示我的 Lo
我在预览版 8 中创建了一个新的 Blazor 服务器端应用程序。当我调用 UriHelper.NavigateTo 从 Index.razor 页面转到计数器页面时,计数器页面被调用两次。 在 In
是否可以在代码隐藏中使用导航管理器进行导航?我有一个全局帮助程序类,如果全局函数失败,我需要将其重定向到特定页面。这可能吗?如果您能够在代码隐藏的 NavagationManager 上创建一个实例,
我在我的应用程序中使用 ngb-datepicker。当在我的组件类中执行函数时,我想导航到特定的月份/年份。我知道 ngbDatePicker 中有一个名为 navigateTo 的方法,可以调用它
[编辑] -> Playground Link 我正在使用 NativeScript 和 Vue 创建一个应用程序。加载后,我想显示一个登录页面,或者如果用户之前已登录,则导航到其他地方。我的页面已加
希望这将是一个简单的,在 Sketchflow 中,我正在尝试连接上下文菜单以导航到另一个页面。 我已经创建了上下文菜单,添加了一个菜单项,右键单击“对象和时间轴”面板中的 mneu 项,然后选择“导
我正在尝试 Blazor ServerSide 并创建了一个组件以在用户未登录时重定向到登录页面。 @inject Microsoft.AspNetCore.Components.Navigation
运行 testcafe 时,某些 URL 未加载。例如,当我尝试重定向到本地主机时,它不会加载并直接进入下一步。 await t.navigateTo('localhost:8080') 最佳答案 这
我注意到我必须使用navigateTo 进行使用已经过身份验证的用户的测试。如果我用 .page 定义它们,它只会让我返回登录屏幕,因为它似乎看不到 Angular 色/状态。 我认为这是有意的,但文
我有一个关于 asp.net core 和 razor 页面的非常简单的问题。 在 c# razor 代码中,我想在某些情况下重定向到另一条路线。 如果之前有异步(等待)webservice 调用,N
您好,我昨天解决了一个问题,但它又出现了。 我尝试使用一个函数在我的 vue 页面之间进行路由。 路由.js import Page from '../components/Page' const r
我正在尝试向主文件夹插件写入第二个菜单,并且我想在文本 block (在旋转木马 block 和插件实例之间)中写入一段 html,以便用户可以导航到另一个插件。 如何使用 buildfire.nav
我在 TestCafe 中进行了以下测试: import { Selector } from 'testcafe'; const TEST_URL = process.env.TEST_URL; fi
我正在使用 NgbDatepicker 可以在 ngAfterViewInit() 上完成喜欢: @ViewChild('dp') datepicker: NgbDatepicker; ngAft
NavigateTo()位于 App.cs 中的函数 public static Task NavigateTo() where T : BaseViewModel { // do s
我才刚刚开始使用 karma,虽然看起来一切都已正确连接并且我的单元测试正在按预期运行,但我无法通过端到端测试找到任何元素。 当我转到调试页面时,我可以看到我的应用程序的一个非常简短的闪现,它告诉我我
一个 Blazor WASM 项目 我在本地主机上调试时按预期开发路由。例如,登录后,如果成功,将调用NavigateTo("/mypage")。这在本地按预期工作,并将我带到 "localhost:
我有一个 Blazor 服务器 Web 应用程序; .NET 5。 我遇到了与在我的 Web 应用程序中的页面之间导航相关的挫折: 当我使用 NavigationManager.NavigateTo(
我是 JS 和 TestCafe 的新手。 在 TestCafe 中使用 PageObjects 我的目标是在运行测试之前启动登录页面并进行身份验证。 .open 调用在固定装置中工作正常。也来自 w
我是一名优秀的程序员,十分优秀!