我有一个Blazor Server应用程序,加载文档时需要运行js函数-当我使用“静态”模式时,jQuery $(document).ready()
可以正常工作,但是我需要使用“ ServerPrerendered”模式-当如果用户在导航栏上单击其他链接,则$(document).ready()不会触发,因为Blazor使用SingalR来更新内容。建议的方法是在内部使用JSRuntime.InvokeVoidAsync("jsfunctiont")
OnAfterRenderAsync
中的defaultLayout.razor
,但问题是此事件发生在所有子组件完全呈现之前,因此我的js函数将失败。
我的问题是在完全渲染所有子组件之后如何调用js函数?等同于使用“ ServerPreRendered”模式的Blazor服务器应用中的$(document).ready()
?
感谢一百万!
答案 0 :(得分:3)
OnAfterRender
(具有firstRender == true)是您所需要的。直到全部内容在浏览器中呈现后,它才会触发。
但是,创建页面后,内容将更改,因此将创建新组件并销毁现有组件。如果您的jsfunction
无论页面何时创建,都需要与页面上的每个组件挂钩,则您的方法将行不通。您还需要各个组件覆盖OnAfterRenderAsync
并调用jsfunction
来传递对其自身的引用。
答案 1 :(得分:0)
在通过 SignalR(使用 Blazor 服务器端)添加/删除新组件时 $(document).ready()
未触发的问题相同。
我没有挂钩到每个组件的 OnAfterRenderAsync
并调用 JsRuntime.Invoke..
,而是通过使用解决了它
$(document).on('DOMSubtreeModified', function () { // doyourwork });