Blazor服务器应用程序$(document).ready()等效项

时间:2020-09-22 04:53:49

标签: blazor blazor-server-side document-ready

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

感谢一百万!

2 个答案:

答案 0 :(得分:3)

OnAfterRender(具有firstRender == true)是您所需要的。直到全部内容在浏览器中呈现后,它才会触发。

但是,创建页面后,内容将更改,因此将创建新组件并销毁现有组件。如果您的jsfunction无论页面何时创建,都需要与页面上的每个组件挂钩,则您的方法将行不通。您还需要各个组件覆盖OnAfterRenderAsync并调用jsfunction来传递对其自身的引用。

答案 1 :(得分:0)

在通过 SignalR(使用 Blazor 服务器端)添加/删除新组件时 $(document).ready() 未触发的问题相同。

我没有挂钩到每个组件的 OnAfterRenderAsync 并调用 JsRuntime.Invoke..,而是通过使用解决了它 $(document).on('DOMSubtreeModified', function () { // doyourwork });