前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Blazor学习之旅 (13) Razor类库的使用

Blazor学习之旅 (13) Razor类库的使用

作者头像
Edison Zhou
发布2024-01-03 09:46:24
1870
发布2024-01-03 09:46:24
举报
文章被收录于专栏:EdisonTalkEdisonTalk

上一篇我们学习了Blazor和JavaScript的互操作性,这一篇我们了解下如何创建和使用Razor类库。

什么是Razor类库?

我们都知道,在.NET应用程序中,我们可以通过NuGet来安装各种基础功能的类库来帮我们实现底层的基础功能从而不需要重复造轮子。在Web前端应用中,同样也涉及一些基础的功能我们希望在各个Blazor应用中复用,而不是在每个Blazor应用中都重复地写一遍。在Blazor应用中,可以通过Razor类库在多个应用程序之间共享和复用这些基础组件。Razor类库也是一种.NET项目类型,它包含 Razor 组件、页面、HTML、级联样式表 (CSS) 文件、JavaScript、图像和其他可由 Blazor 应用程序引用的静态 Web 内容。与其他 .NET 类库项目一样,Razor 类库可以捆绑为 NuGet 包并在 NuGet 包存储库(如 NuGet.org)上共享

方式一:引用Razor类库

代码语言:javascript
复制
dotnet add reference ../MyRazorClassLibrary

方式二:打包Razor类库

代码语言:javascript
复制
dotnet add package MyRazorClassLibrary

接下来,我们就来看看如何创建一个Razor类库,又如何在Blazor应用中使用它。假设,我们需要封装一个ModalDialog(模态对话框)的Razor类库,这样我们在不同的Blazor应用中只需要引用该类库或通过NuGet安装它,就可以复用ModalDialog功能实现,而不需要单独实现一遍它。

创建一个Razor类库项目

添加一个Razor类库项目,假设我们取名为:EDT.BlazorComponent.Dialog。

将默认的Component1.razor文件重命名为ModalDialog.razor,首先将下面的Razor内容添加到ModalDialog.razor中:

代码语言:javascript
复制
@if (Show)
{
    <div class="dialog-container">
        <div class="dialog">
            <div class="dialog-title">
                <h2>@Title</h2>
            </div>

            <div class="dialog-body">
                @ChildContent
            </div>

            <div class="dialog-buttons">
                <button class="btn btn-secondary mr-auto btn-cancel" @onclick="CloseModalDialog">@CancelText</button>
                <button class="btn btn-success ml-auto" @onclick="OnConfirm">@ConfirmText</button>
            </div>
        </div>
    </div>
}

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

    [Parameter]
    public string CancelText { get; set; } = "Cancel";

    [Parameter]
    public string ConfirmText { get; set; } = "Ok";

    [Parameter]
    public RenderFragment ChildContent { get; set; }

    [Parameter]
    public bool Show { get; set; }

    [Parameter] 
    public EventCallback OnConfirm { get; set; }

    public void CloseModalDialog()
    {
        Show = false;
    }
}

顾名思义,这个组件提供了以下几个功能,方便我们在不同项目中复用:

  • 标题
  • “取消”和“确认”按钮,具有可配置的标签和可管理的单击事件
  • 可以通过 ChildContent 参数设置组件的内部内容
  • 可以使用 Show 参数控制对话框的显示状态

为了好看点,添加以下样式内容到 ModalDialog.razor.css中:

代码语言:javascript
复制
.dialog-container {
 position: absolute;
 top: 0;
 bottom: 0;
 left: 0;
 right: 0;
 background-color: rgba(0,0,0,0.5);
 z-index: 2000;
 display: flex;
 animation: dialog-container-entry 0.2s;
}

@keyframes dialog-container-entry {
 0% {
   opacity: 0;
 }

 100% {
   opacity: 1;
 }
}

.dialog {
 background-color: white;
 box-shadow: 0 0 12px rgba(0,0,0,0.6);
 display: flex;
 flex-direction: column;
 z-index: 2000;
 align-self: center;
 margin: auto;
 width: 700px;
 max-height: calc(100% - 3rem);
 animation: dialog-entry 0.4s;
 animation-timing-function: cubic-bezier(0.075, 0.820, 0.165, 1.000);
}

@keyframes dialog-entry {
 0% {
   transform: translateY(30px) scale(0.95);
 }

 100% {
   transform: translateX(0px) scale(1.0);
 }
}

.dialog-title {
 background-color: #444;
 color: #fff2cc;
 padding: 1.3rem 0.5rem;
}

 .dialog-title h2 {
   color: white;
   font-size: 1.4rem;
   margin: 0;
   font-family: Arial, Helvetica, sans-serif;
   line-height: 1.3rem;
 }

.dialog-body {
 flex-grow: 1;
 padding: 0.5rem 3rem 1rem 0.5rem;
}

.dialog-buttons {
 height: 4rem;
 flex-shrink: 0;
 display: flex;
 align-items: center;
 background-color: #eee;
 padding: 0 1rem;
}

接下来,我们可以给它打包:

代码语言:javascript
复制
dotnet add package EDT.BlazorComponent.Dialog

这里,我们就不演示了,通过直接引用的方式来进行后续操作。

在Blazor应用中使用Razor类库

首先,我们通过添加引用的方式,将刚刚创建的Razor类库引用到我们的项目中。

代码语言:javascript
复制
dotnet add reference ../EDT.BlazorComponent.Dialog

然后,我们以 Home.razor 页面为例,在这个页面中使用刚刚的ModalDialog。

Step1. 添加命名空间

代码语言:javascript
复制
@using EDT.BlazorComponent.Dialog;

Step2. 添加ModalDialog并配置自定义内容,这里我们定义了对话框中的标题和内容,以及两个按钮的文本,并且让它显示出来(Show="true")。

代码语言:javascript
复制
<ModalDialog Title="Modal Dialog Demo" Show="true"
  OnConfirm="@ChangeLanguage" ConfirmText="Yes" CancelText="No">
  <p>
    Are you sure to change language to English?
  </p>
</ModalDialog>

Step3. 添加OnConfirm事件回调方法 ChangeLanguage,这里我们让用户点击OK按钮的时候更换一下语言:

代码语言:javascript
复制
@code {
  .......
  
  private void ChangeLanguage()
  {
    Culture = supportedCultures[1];
  }
}

最终的效果如下图:

小结

本篇,我们了解了什么是Razor类库,然后通过一个DEMO了解了如何创建Razor类库 和 在Blazor项目中使用Razor类库。在实际开发中,我们经常会封装一些基础功能组件,在各个Blazor项目中复用,避免重复劳动。

参考代码

GitHub:https://github.com/EdisonChou/BlazorSamples/tree/main

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Razor类库?
  • 创建一个Razor类库项目
  • 在Blazor应用中使用Razor类库
  • 小结
  • 参考代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档