繁体   English   中英

Blazor 组件中的 JavaScript 文件存在问题

[英]Problem with JavaScript files in Blazor component

我在 Blazor 组件(Blazor 服务器和 .net 6)中使用 JavaScript 文件。 如下:

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {
        await jsRuntime.InvokeAsync<IJSObjectReference>("import", "/css/template/vendor/libs/bs-stepper/bs-stepper.js");
    }
}

第一次加载页面时一切正常,但是当我使用导航更改页面并进入另一个页面(组件)然后再次返回与上一页相同时,无法使用 JavaScript 代码。

这个问题的原因是什么?

这是在 blazor 应用程序中使用 javascript 库的方法。

index.html (或_Layout.cshtml )的body元素末尾添加库的脚本

<body>
    ...
    <script src="css/template/vendor/libs/bs-stepper/bs-stepper.js"></script>
    ...
</body>

head元素末端的 css

<head>
    ...
    <link rel="stylesheet" href="css/template/vendor/libs/bs-stepper/bs-stepper.min.css">
    ...
</head>

在路径wwwroot/js中创建一个名为stepperInteropHelper.js的 js 文件,并在其中添加此 function:

export function initStepper() {
    new Stepper(document.querySelector('.bs-stepper'));
}

最后在使用步进器的组件中:

@inject IJSRuntime jsRuntime

<div class="bs-stepper">
    ...
</div>

@code {
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            // import stepperInteropHelper.js module
            IJSObjectReference module = await jsRuntime.InvokeAsync<IJSObjectReference>(
                "import", "./js/stepperInteropHelper.js");

            // call initStepper method from stepperInteropHelper.js
            await module.InvokeVoidAsync("initStepper");
        }
    }
}

暂无
暂无

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

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