如何在Blazor中设置页面标题?

时间:2019-11-14 18:27:00

标签: blazor

由于Blazor是SPA框架,我想知道是否可以为Blazor中的每个页面设置页面标题吗?

我目前正在Blazor Webassembly项目上工作,无法找到一种添加页面标题的方法,因为在SPA中只有一个index.html,但是如果可以实现设置,它将非常有用每个“页面”的标题。

6 个答案:

答案 0 :(得分:5)

在ASP.NET CORE 5.0中,添加了标题的新组件

 <Title value="Page title" /> 

Msdn参考:https://docs.microsoft.com/en-us/aspnet/core/blazor/fundamentals/additional-scenarios?view=aspnetcore-5.0#influence-html-head-tag-elements

首先在组件中添加using语句

@using Microsoft.AspNetCore.Components.Web.Extensions.Head

您可以使用以下命令安装(如果未安装)。

dotnet add package Microsoft.AspNetCore.Components.Web.Extensions --version 5.0.0-preview9.20467.1

5.0.0-preview9.20467.1是我撰写本文时的版本。请检查nuget网址以获取最新版本

Nuget网址:https://www.nuget.org/packages/Microsoft.AspNetCore.Components.Web.Extensions/

然后添加标题标签。

<Title Value="My page title" />

请参见下面的示例输出图像

enter image description here

答案 1 :(得分:4)

1)在index.html(或包含的.js文件)中提供以下脚本:

<script>
    setTitle = (title) => { document.title = title; };
</script>

2)在每个页面中注入jsinterop:

@inject IJSRuntime JSRuntime;

3)每次渲染后,将文档标题设置为您选择的值:

@code
{
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
       await JSRuntime.InvokeVoidAsync("setTitle", "this is the new title"); ;        
    }    

}

答案 2 :(得分:3)

ASP.NET CORE 5.0中,official docs说,我们可以使用<head>组件轻松影响HTML Title标签元素

@using Microsoft.AspNetCore.Components.Web.Extensions.Head

<Title Value="{TITLE}" />

更新1:

看起来该API已被搁置以进一步改进。这已从官方文档链接中删除。这是github issue跟踪的内容。 API最终在文档中可用后,我将更新答案。

答案 3 :(得分:1)

对此post表示敬意,您可以制作可重复使用的组件。

将以下脚本添加到js文件,或添加到 index.html

enter image description here

<!DOCTYPE html>
<html>

<head>
...
</head>

<body>
...
    <script>
        window.setTitle = (title) => {
            document.title = title;
        }
    </script>
</body>

</html>

在共享文件夹中创建一个新组件 PageTitle.razor

folder layout

@inject IJSRuntime JsRuntime;

@code {
    [Parameter]
    public string Title { get; set; }

    protected override async Task OnInitializedAsync()
    {
        await SetTitle();
    }

    private async Task SetTitle()
    {
        await JsRuntime.InvokeVoidAsync("setTitle", Title);
    }
}

添加到要更改其名称的剃须刀页面:

<PageTitle Title="Home sweet home" />

Index.razor

Final result

答案 4 :(得分:1)

您可以使用 this Nuget package。如果您想显示通知,它可以更改您的 Blazor 页面标题 甚至 图标。查看documentation了解更多详情。

enter image description here

demo app 中试用。

答案 5 :(得分:0)

帮助器jsakamoto Toolbelt.Blazor.HeadElement 是解决页面标题正确更改的唯一方法。归根结底,改标题的主要原因是为了帮助SEO,因此必须要有SERVER SIDE PRERENDERING。

Blazor Head Element Helper

enter image description here

要使用帮助程序,请访问作者在 https://dev.to/j_sakamoto/yet-another-way-to-changing-the-page-title-in-blazor-and-more-43k 上的说明

以及关于 https://github.com/jsakamoto/Toolbelt.Blazor.HeadElement/#blazor-head-element-helper-

的更多信息

我想问这个 stackoverflow 问题的作者,使其成为选定的答案。