繁体   English   中英

在 blazor 中使用 javascript,直到我点击页面才工作

[英]using javascript in blazor, not working until i click page

我遇到了一个问题,因为我正在通过互操作onAfterRenderAsync方法加载我的 javascript,我无法让我的 javascript 加载(在页面加载时)。ZDE9B9ED78D7E2E1DCEEFFEE780E2F91.9Z 仅在点击页面后才有效知道这是为什么,显然是因为我的 javascript 正在等待 onclick function...
但是我想避免这种情况,并且无需自己附加 onclick function 就可以加载 javascript。
任何人都可以帮忙吗?

所以基本上,我有一个带有汉堡扩展器的导航栏(显示或隐藏我的侧边栏),但这只有在我点击屏幕后才有效。
我希望它立即工作...

这是 javascript:

function LoadContent() {
    function LoadContent() {
    document.addEventListener("DOMContentLoaded", document.onclick = function(event) {
      const showNavbar = (toggleId, navId, pId, headerId) => {
        const toggle = document.getElementById(toggleId),
        nav = document.getElementById(navId),
        bodypd = document.getElementById(pId),
        headerpd = document.getElementById(headerId);
        mainbodypd = document.getElementById("mainbody");
                      
        if (toggle && nav && bodypd && headerpd && mainbodypd) {
          
          toggle.addEventListener("click", () => {
            nav.classList.toggle("show");
            toggle.classList.toggle("bx-x");
            bodypd.classList.toggle("body-pd");
            headerpd.classList.toggle("body-pd");
            mainbodypd.classList.toggle("height-100short");
          });
        }
      };
      showNavbar("header-toggle", "nav-bar", "body-pd", "header");
      const linkColor = document.querySelectorAll(".nav_link");
      
      function colorLink() {
        if (linkColor) {
          linkColor.forEach(l => l.classList.remove("active"));
          this.classList.add("active");
        }
      }
      linkColor.forEach(l => l.addEventListener("click", colorLink));
    });     
  }
}

和 Blazor:

protected override async Task OnAfterRenderAsync(bool firstRender){
  if (firstRender){
    await JS.InvokeVoidAsync("LoadContent");
    await JS.InvokeVoidAsync("ToolTipInit");
    StateHasChanged();
  }
}

你可以试试这个方法。 在根文件夹或 wwwwroot 文件夹中的任何位置创建 JavaScript 文件,例如“MyCode.js”。 在那里复制您的 JavaScript function 但在开头添加导出。 它应该是这样的:

export function LoadContent() {

从您的代码中完全删除您的document.addEventListener("DOMContentLoaded, document.onclick部分并保存文件。

将 IJSRuntime 注入到您的 Blazor 组件中,如下所示:

@inject IJSRuntime JSRuntime

在 Blazor 组件的代码部分添加以下代码:

    protected override async Task OnAfterRenderAsync(bool firstRender)
{
    await using var module = await JSRuntime.InvokeAsync<IJSObjectReference>("import", "./MyCode.js");
    await module.InvokeVoidAsync("LoadContent");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM