zoukankan      html  css  js  c++  java
  • Blazor入门笔记(2)-分部类组件与组件的继承

    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 组件

  • 相关阅读:
    03点云文件常用格式转换(pcd,txt,ply,obj,stl)
    04点云数据结构格式
    vs2015 +ZXing/Zbar的环境配置
    01PCL 点云+vs2015在win10下的环境配置
    07点云的滤波与分割
    gitlabCI/CD部署一个java项目
    k8s 为什么需要数据卷
    gitlab Runner 安装与部署
    gitlab ci/cd介绍
    k8s emptyDir临时数据卷
  • 原文地址:https://www.cnblogs.com/zxyao/p/12638173.html
Copyright © 2011-2022 走看看