Blazor 服务器应用程序 $(document).ready() 等价物

Joh*_*Lee 4 document-ready blazor blazor-server-side

我有一个 Blazor 服务器应用程序,我需要在加载文档时运行一个 js 函数——当我使用“静态”模式时,jQuery$(document).ready()工作正常,但我需要使用“ServerPrerendered”模式——当用户点击导航栏上的不同链接时, $(document).ready() 永远不会触发,因为 Blazor 使用 SingalR 来更新内容。建议的方法是使用JSRuntime.InvokeVoidAsync("jsfunctiont")inside OnAfterRenderAsyncdefaultLayout.razor但问题是此事件发生在所有子组件完全呈现之前,因此我的 js 函数将失败。我的问题是在所有子组件完全渲染后调用js函数的方式是什么?这相当于$(document).ready()在 Blazor 服务器应用程序中使用“ServerPreRendered”模式?

太感谢了!

Pet*_*ris 7

OnAfterRender(使用 firstRender == true)正是您所需要的。直到整个内容在浏览器中呈现后才会触发。

但是,在您的页面创建后,内容将发生变化,因此将创建新组件并销毁现有组件。如果您jsfunction需要挂钩页面上的每个组件,而不管它是何时创建的,那么您的方法将不起作用。您还需要各个组件来覆盖OnAfterRenderAsync并调用jsfunction将引用传递给它们自己。

  • 当所有子组件渲染时,需要运行 js 函数 OnAfterRender 和 DefaultLayout.razor 上的 firstRender 发生在所有子组件之前...js 函数正在尝试查看整个 DOM 来执行某些操作 (3认同)