1.前言

本文接自Blazor的组件(1)-从0构建一个组件

2.分部类组件

Razor组件你可理解为就是一个类名与文件名相同的类,因此,可以新建一个同名的partial类,将组件中@code里面的代码放置到这个partial类里面,然后将原来组件中的@code部分删除。

将VButton组件改写为分部类的代码组织方式,其代码如下(新建一个组件为VButtonPartial,并将原来的代码VButton组件中的代码分别复制过去):

VButtonPartial.razor

<button type="button" class="@GetClassName()">@ChildContent</button>

VButtonPartial.razor.cs

using Microsoft.AspNetCore.Components;

namespace BlazorComponent.MyComponents
{
public partial class VButtonPartial
{
[Parameter]
public RenderFragment ChildContent { get; set; } [Parameter]
public VBtnStyle BtnStyle { get; set; } = VBtnStyle.Default; [Parameter]
public VBtnSize BtnSize { get; set; } = VBtnSize.Default; private string GetClassName()
{
var builder = new System.Text.StringBuilder();
builder.Append("btn");
if (BtnStyle != VBtnStyle.Default)
{
builder.Append($" btn-{BtnStyle.ToString().ToLower()}");
}
if (BtnSize != VBtnSize.Default)
{
builder.Append($" btn-{BtnSize.ToString().ToLower()}");
}
return builder.ToString();
}
}
}

3.组件的继承

Razor组件都继承于Microsoft.AspNetCore.Components.ComponentBase类(可以项目的obj/Debug/netstandard2.1/Razor看到),因此,我们可以新建一个继承自ComponentBase类的父类,将组件中的公共部分提取到父类中,然后使组件继承这个父类。例如之前的VButton组件,我们可以构建一个新的VComponentBase,该类继承至ComponentBase类,然后将ChildContent属性提升到这个类中:

VComponentBase.cs

public class VComponentBase:ComponentBase
{
[Parameter]
public RenderFragment ChildContent { get; set; }
}

然后新建一个组件VButtonInherit,将VButton组件中除ChildContent组件参数外的所有代码都复制到VButtonInherit组件中,并在组件最上方使用@inherits指令,指示VButtonInherit继承于VComponentBase类。

VButtonInherit.razor

@inherits VComponentBase
<button type="button" class="@GetClassName()">@ChildContent</button> @code {
[Parameter]
public VBtnStyle BtnStyle { get; set; } = VBtnStyle.Default; [Parameter]
public VBtnSize BtnSize { get; set; } = VBtnSize.Default; string GetClassName()
{
var builder = new System.Text.StringBuilder();
builder.Append("btn");
if (BtnStyle != VBtnStyle.Default)
{
builder.Append($" btn-{BtnStyle.ToString().ToLower()}");
}
if (BtnSize != VBtnSize.Default)
{
builder.Append($" btn-{BtnSize.ToString().ToLower()}");
}
return builder.ToString();
}
}

当然,也可以将分部类组件与组件的继承结合使用。

本文参考:创建和使用 ASP.NET Core Razor 组件

Blazor入门笔记(2)-分部类组件与组件的继承的更多相关文章

  1. Blazor入门笔记(6)-组件间通信

    1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 在使用B ...

  2. Blazor入门笔记(1)-从0构建一个组件

    1.环境 VS2019 16.5.1 .NET Core SDK 3.1.200 Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.创建项目 ...

  3. Blazor入门笔记(5)-数据绑定

    1.环境 VS2019 16.5.1 .NET Core SDK 3.1.200 Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.默认绑定 ...

  4. Blazor入门笔记(4)-组件的生命周期

    1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 Blaz ...

  5. Blazor入门笔记(3)-C#与JS交互

    1.环境 VS2019 16.5.1 .NET Core SDK 3.1.200 Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.前言 Bl ...

  6. 【Unity|C#】基础篇(5)——分部类与分部函数(partial)

    [学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.c ...

  7. [C#学习笔记]分部类和分部方法

    知识在于积累. 前言 好久没写博客了,因为在看<CLR via C#>的时候,竟然卡在了分部方法这一小节几天没下去.今天重新认真阅读,有些感悟,所以在此记录. 然后. 每天早晨第一句,&l ...

  8. Blazor入门:ASP.NET Core Razor 组件

    目录 关于组件 组件类 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留 ...

  9. MASA Blazor入门这一篇就够了

    1.什么是Blazor? 有什么优势? ASP.NET Core Blazor 简介 Blazor 是一个使用 Blazor 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScr ...

随机推荐

  1. JZOJ 1492. 烤饼干

    1492. 烤饼干 (Standard IO) Description NOIP烤饼干时两面都要烤,而且一次可以烤R(1<=R<=10)行C(1<=C<=10000)列个饼干, ...

  2. disruptor 链路实战 三

    一.创建Event类 Trade import java.util.concurrent.atomic.AtomicInteger; public class Trade { private Stri ...

  3. c++ 中的单例类模板的实现方法

    1.什么是单例模式 在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在 ( Single Instance ).如超市收银系统,其外观主要由显示器(1个).扫描枪(1个).收款箱(1个)组 ...

  4. Mozilla的 Firefox Graphics 团队向社区寻求重现WebRender bug的方法

    导读 Mozilla 的 Firefox Graphics 团队正在向社区寻求帮助,由于他们收到了一些随机发生的 UI 错误报告,却一直无法找出错误的重现步骤(STR),因此现在向外寻求社区用户的帮助 ...

  5. MATLAB中的Regex

    regexprep——用于对字符串进行查找并替换. regexp Definition: 用于对字符串进行查找,大小写敏感. startIndex = regexp(str,expression) 返 ...

  6. Netty源码分析之ChannelPipeline—出站事件的传播

    上篇文章中我们梳理了ChannelPipeline中入站事件的传播,这篇文章中我们看下出站事件的传播,也就是ChannelOutboundHandler接口的实现. 1.出站事件的传播示例 我们对上篇 ...

  7. spring boot 学习笔记(一)

    学习链接:http://www.cnblogs.com/ityouknow/category/914493.html 定义 spring boot 是由pivotal 团队提供的权限框架,设计目的是用 ...

  8. Visual Studio 安装中出现闪退

    问题描述:win7 系统下, 安装 Visual Studio Community 2017 过程中,安装界面闪退 原因:Visual Studio 的版本低了 解决方案:选择 Visual Stud ...

  9. 解决idea的pom.xml文件不自动导包问题

      在用pom添加新项目的包时,突然发现pom文件不能自动导包,找了半天发现用以下两个步骤就能解决: 一:打开setting 二:找到maven

  10. str的常用方法

    注:s表示定义的一个字符串变量,如:s = 'hello string' 1.  s.index()  查找元素,若查到则返回该元素索引,含多个该元素则返回第一个,查不到则报错 s = 'hello ...