Blazor入門筆記(1)-從0構建一個組件


1.環境

VS2019 16.5.1

.NET Core SDK 3.1.200

Blazor WebAssembly Templates 3.2.0-preview2.20160.5

2.創建項目

首先創建一個簡單的Blazor WebAssembly項目,這個項目沒有不具備后端支持。目前blazorwasm 仍然處於預覽之中,如果需要使用此模板,可以通過以下命令進行安裝:

1 dotnet new -i Microsoft.AspNetCore.Components.WebAssembly.Templates::3.2.0-preview2.20160.5

之所以介紹這個步驟,是為了說明本文所使用時Blazor Wasm而不是Blazor Server。

圖 1

3.編寫組件

Blazor中的組件是使用 C# 和HTML組合在Razor組件文件(.razor)中實現的,因此Blazor中的組件實則為Razor組件。由於Blazor默認使用bootstrap的UI,因此接下來將按照Bootstrap樣式編寫一個按鈕組件。

3.1.新建組件

在項目下新建一個文件夾“MyComponents”,然后在“MyComponents”中添加一個新的Razor組件:VButton.razor

 圖 2

新建的Razor組件文件中,默認包含一個一個h3標記和一個@code塊。@code塊是用於定義組件類的成員的,在@code 塊中,可以用C#編寫組件的屬性、字段、方法等(組件參數需要使用[Parameter]在public的屬性上進行標注)。Razor組件中允許定義多個@code塊,同時也可以使用“@”標記為頁面的呈現進行相關的邏輯處理,這點是與MVC中是相同的。

既然要編寫button組件,那么首先將默認的h3標記刪除,更換為以下HTML代碼。

1 <button type="button" class="btn"></button>

這樣,一個bootstrap樣式的button組件已經創建成功了,我們已經可以在其他組件中使用<VButton />或者<VButton></VButton>來進行使用了,渲染后的Button不具備任何內容(innerHTML),也無法修改樣式、大小。

3.2.捕捉組件子內容

通常,我們希望將<VButton>Button Text</VButton>標記中的Button Text作為渲染后的html元素button的innerHTML,因此需要為VButton組件添加一個RenderFragment類型的屬性ChildContent,並將@ChildContent放到組件VButton組件的button標記中。注意,ChildContent並不僅僅是文字,也可以是Html。 現在VButton組件中的代碼應該如下:

1 <button type="button" class="btn">@ChildContent</button>
2 
3 @code {
4     [Parameter]
5     public RenderFragment ChildContent { get; set; }
6 }

3.3.樣式控制

Bootstrap的button樣式包括默認、primary、secondary、success、info、warning、danger、dark、light、link等10種樣式。首先創建一個枚舉,將button所有樣式放在其中:

 1 public enum VBtnStyle
 2 {
 3     Default,
 4     Primary,
 5     Secondary,
 6     Success,
 7     Info,
 8     Warning,
 9     Danger,
10     Dark,
11     Light,
12     Link
13 }

然后為VButton組件添加一個BtnStyle的組件參數:

1 [Parameter]
2 public VBtnStyle BtnStyle { get; set; } = VBtnStyle.Default;

需要注意的是,由於我們之前在button元素上添加的class屬性,為了方便操作,我們需要將其修改為class="@GetClassName()",並為VButton組件添加一個函數GetClassName:

 1 string GetClassName()
 2 {
 3     var builder = new System.Text.StringBuilder();
 4     builder.Append("btn");
 5     if(BtnStyle != VBtnStyle.Default)
 6     {
 7         builder.Append($" btn-{BtnStyle.ToString().ToLower()}");
 8     }
 9     return builder.ToString();
10 }

現在,VButton組件中的所有的代碼如下所示:

 1 <button type="button" class="@GetClassName()">@ChildContent</button>
 2 
 3 @code {
 4     [Parameter]
 5     public RenderFragment ChildContent { get; set; }
 6 
 7     [Parameter]
 8     public VBtnStyle BtnStyle { get; set; } = VBtnStyle.Default;
 9 
10     string GetClassName()
11     {
12         var builder = new System.Text.StringBuilder();
13         builder.Append("btn");
14         if(BtnStyle != VBtnStyle.Default)
15         {
16             builder.Append($" btn-{BtnStyle.ToString().ToLower()}");
17         }
18         return builder.ToString();
19     }
20 }

3.4.大小控制

BootStrap中按鈕的大小分為默認、lg、sm 3種,按照2.3.中添加樣式控制的思路,先添加一個VBtnSize的枚舉,再為VButton組件添加一個類型為VBtnSize、默認值為VBtnSize.Default的組件參數BtnSize,最后在GetClassName函數中對其進行判斷並放置到button的屬性class中。

4.使用

打開,Pages目錄下的Index.razor頁面,在@page "/"路由下面添加以下代碼,然后運行,即可看到效果如圖 3所示。

 1 <div class="jumbotron bg-white border border-primary">
 2     <h5>VButton 組件</h5>
 3     <div>
 4         <VButton>Default</VButton>
 5         <VButton BtnStyle="VBtnStyle.Primary">Primary</VButton>
 6         <VButton BtnStyle="VBtnStyle.Secondary" BtnSize="VBtnSize.Sm">Secondary sm</VButton>
 7         <VButton BtnStyle="VBtnStyle.Danger" BtnSize="VBtnSize.Lg">Danger lg</VButton>
 8         
 9         <VButton BtnStyle="VBtnStyle.Warning">
10             <span class="spinner-border spinner-border-sm"></span>
11             Warning Loading..
12         </VButton>
13     </div>
14 </div>

圖 3

注意:在使用VButton組件前,最好先將其所在的命名空間引用“@using BlazorComponent.MyComponents”添加到“_Imports.razor”文件中,這樣便不用每次使用該組件時都使用組件的完全命名了。

本文參考:創建和使用 ASP.NET Core Razor 組件

代碼:https://github.com/zxyao145/LearningBlazor/tree/master/BlazorComponent


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM