blazor 服务器客户端中引导工具提示的问题

Hen*_*son 5 bootstrap-4

在此处输入图片说明我正在尝试为工具提示设置正确的格式,但我不知道该怎么做。下面的代码完美地工作:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Bootstrap 4 Tooltip</title>

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>


<script>
    $(document).ready(function(){
        $('[data-toggle="tooltip"]').tooltip();
    });
</script>
</head>
<body>

    <a class="btn btn-primary btn-lg" href="#" data-toggle="tooltip" title="Default tooltip">Button!</a>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在我的 blazor 服务器应用程序中,我在 _host.cshtml 中包含了完全相同的代码,但工具提示没有获得正确的格式。我很确定这与渲染逻辑有关,因为如果我从我的一个可路由页面中获取一个工具提示元素,并将其直接放在 _host.cshtml 中,它就可以工作。问题是,我怎样才能在我的可路由页面中做到这一点。?

工具提示“Test1”是首选行为,该按钮直接在 _host.cshtml 中实现。如果在可路由页面中实现了相同的按钮,'Test2' 就是我得到的结果。标签看起来像这样:

<a class="btn btn-primary btn-lg" href="#" data-toggle="tooltip" data-placement="right" title="Test2">abc</a>
Run Code Online (Sandbox Code Playgroud)

Hen*_*son 7

诀窍是从页面方法 onafterrender 加载 jquery 脚本。cshtml文件中的snippet执行到很早,所以不起作用。将 jquery 代码添加到单独的 javascript 文件中并使用 onafterrender 方法从每个页面使用 ijsruntime.Invokeasync 执行该代码时,它完美地工作。

Javascript:

function addTooltips() {
    $('[data-toggle="tooltip"]').tooltip({
        trigger: 'hover'
    });
    $('[data-toggle="tooltip"]').on('mouseleave', function () {
        $(this).tooltip('hide');
    });
    $('[data-toggle="tooltip"]').on('click', function () {
        $(this).tooltip('dispose');
    });
}
Run Code Online (Sandbox Code Playgroud)

剃刀:

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {
        await js.InvokeVoidAsync("addTooltips");
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML:

 <button class="btn btn-secondary" @onclick="@(() => Callback.InvokeAsync(Item))" data-toggle="tooltip" data-placement="top" title="Edit">Edit</button>
Run Code Online (Sandbox Code Playgroud)

  • 您需要添加 `@inject IJSRuntime JS` https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-5.0 (2认同)