Blazor Navigationmanager 取消在 locationchanged 上的导航
Posted
技术标签:
【中文标题】Blazor Navigationmanager 取消在 locationchanged 上的导航【英文标题】:Blazor Navigationmanager cancel navigation on locationchanged 【发布时间】:2020-11-21 03:13:35 【问题描述】:问题:
Blazor 上是否有取消导航的方法?
让我们假设一个像这样的a href
:
<a href="/some/other/blazor/spa/page">Go</a>
我想取消导航(例如,如果我们正在编辑表单)
我尝试过的。
通过JS
我通过 JSInterop 设置了onbeforeunload
dom 委托:
window.onbeforeunload = function()
return 'Vols abandonar aquesta pàgina?';
;
但 blazor 绕过它。
通过位置改变
我尝试拦截locationchanged
事件的导航失败:
@implements IDisposable
@inject NavigationManager NavigationManager
...
protected override void OnInitialized()
NavigationManager.LocationChanged += HandleLocationChanged;
private void HandleLocationChanged(object sender, LocationChangedEventArgs e)
// Cancel Navigation Here
public void Dispose()
NavigationManager.LocationChanged -= HandleLocationChanged;
【问题讨论】:
【参考方案1】:目前没有,正在为 .NET V5 讨论此功能 - 并且有一个社区贡献拉取请求,因此希望能够加入。https://github.com/dotnet/aspnetcore/pull/24417
在 Blazor 中导航时页面不会更改,因此不会为了触发 onbeforeunload 而卸载。
【讨论】:
“有一个社区贡献拉取请求,所以希望能加入。” ? 对此的简短更新:预计将在 .net 6 中提供 不幸的是,看起来这最快要等到 .net 7。【参考方案2】:更新到@PeterMorris 的答案。
截至 2021 年 5 月 17 日,NavigationManger
的位置更改事件现已提交给.NET 6.0
。我希望可以在应用程序的全局级别上捕获此事件。
https://github.com/dotnet/aspnetcore/issues/14962
【讨论】:
@daniherrera 哈哈,深夜编码。现在修复它:)【参考方案3】:你试过把你的 js 文件放到 index.html 或 _host.cshtml 页面吗?
【讨论】:
以上是关于Blazor Navigationmanager 取消在 locationchanged 上的导航的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Quartz.NET 作业中注入 NavigationManager?
Blazor University (27)路由 —— 检测导航事件
Blazor University (26)路由 —— 通过代码导航
用NavigationManager实现订单的列表和新增页面之间的导航
滚动单击不适用于 NavigationManager.NavigateTo,我无法使用 href,因为我需要 forceLoad 功能