Blazor教程: 創建一個簡單的TodoList應用

2021-03-02 AzureDeveloper

前面我們通過幾篇文件介紹了什麼是Blazor以及給出了我們的hello Word, 同時介紹了典型的部署Server和WebAssembly模板創建出來的文件結構是什麼樣的,特別是創建不同的部署模型,應用是如何配置和啟用的, 如果您對這些概念還不是很清楚,建議您通過如下的文章複習一下。

什麼是Blazor?

Hello,  Blazor World! (基於WebAssembly部署)

Hello,  Blazor World! (基於Blazor Server部署)

深入理解Blazor Server技術

Blazor和PWA讓桌面、安卓&iOS App開發多了一個選擇和可能

 

今天我們使用基於BlazorServer的部署模型創建一個簡單的TodoList應用,雖然這個應用非常簡單,但是基本包含了Blazor應用開發的很多要點:

如何定義應用默認的Layout。

如何使用預定義的組件。

如何新建一個自定義的組件。

如何進行數據綁定。

如何監聽一個事件。

如何使用單獨的CSS,對自定義的組件定義外觀。

深入的理解基於Blazor的UI渲染。

 

該教程的原始碼,您可以從這裡下載:
https://github.com/hylinux/AzureDeveloperCN/tree/main/TodoList

該項目運行的結果圖:
 

 

 

創建應用:
         dotnet new blazorserve -o TodoList
         使用模板BlazorServer 創建一個應用,名字叫做TodoList,  創建完成後,你可以進入目錄TodoList, 然後嘗試瀏覽一下使用模板BlazorServer創建出來的項目結構以及文件結構是什麼樣子的,可以仔細的觀察一下Program.cs,     Startup.cs, 以及App.razor 等文件是整個應用最為重要的運行入口。

如何定義默認的Layout:
         在創建應用的時候,我們就提到整個應用的入口就是Program.cs,      在該文件中,創建一個普通的webhost, 然後將該webhost通過Startup.cs進行配置。

Startup.cs裡有兩個方法最為重要:ConfigureServer和Configure,  為了運行基於BlazorServer運行的Blazor應用,請注意只需要在Startup.cs中添加劃紅線的語句就可以了。
這其中,添加RazorPages方法,AddServerSideBlazor() 擴展方法,以及最後在endpoint裡配置,都是為了使得一個基於Blazor Server技術構架的應用正常運行,要查看自己的項目是否是可以運行Blazor Server的應用,最低要檢查這幾個設定和步驟。
 


從上述文件可以觀察到,從mappingendpoint的時候開始,整個應用的首頁是位於項目根目錄下的Pages裡的_Host.cshtml,  打開_Host.cshtml 文件可以觀察到如下所示:
 

從上述劃紅線處可以看到:

該頁面是一個Razor Pages類型的可以承接路由的頁面。

指定了該Razor Pages頁面的名稱空間

並且由於該文件是一個Razor Page項目中的頁面,同時也是在部署的時候用戶訪問根目錄的入口文件,也即是首頁,相當於我們之前的index.html,     index.jsp, index.asp, index.php 這些頁面的作用,同時也需要注意到部署為blazor server入口文件是_Host.cshtml,  但是部署為webassembly是index.html.

從<component     type="typeof(App)"> 這一行指明我們首個組件,也即是App.razor.

 

 

Iii. 理解App.razor的內容:
 

從App.razor的內容可以學習到,整個App.razor 直接使用了Blazor內置的組件Router, 該組件定義了項目需要使用的程序集,也即typeof(Program).Assembly,  之後關於項目所需要的類,名稱空間,接口等信息全是從該程序集搜索,另外也可以觀察到在blazor中應用組件的模式均使用html形式的標記形式,

例如
<Router.…>
      <Found>
     </Found>

     <NotFound>
     </NotFound>

</Route>

 

同時需要注意在Found組件內,繼續使用了組件<RouteView> 同時指定了默認的Layout組件為MainLayout組件。

 

MainLayout.razor 內容:
 

請注意在Mainlayout組件中,使用了內置的組件<NavMenu/> 代表渲染左側側菜單。同時在Layout文件中,使用@Body代表渲染內容。


 

Iii. 如何使用預定義的組件
關於如何使用預定義的組件,前面我也講述過了,對於Blazor而言,在UI的部分直接以類似HTML標記一樣的語法使用預定義的組件。


IV. 如何新建一個自定義的組件

下面我們將自定義一個組件,並逐漸豐富該組件的內容, 完成我們上述如結果圖所示的功能。進入到項目的根目錄,運行如下的命令:

dotnetnew razorcomponent -n Todo -o Pages

 

通過該命令即創建了一個新的組件,該命令的意思是創建一個新的razor組件,-n 指定該組件的名稱為Todo,  -o 指定該組件輸出到 Pages目錄,這裡有一個默認的約定需要遵守,即所有的自定義的帶路由的組件必須位於項目根目錄下的Pages目錄下,可以通過在Startup.cs 中ConfigureServer中傳遞選項參數進行更改,目前我們項目直接使用這個就好。

還有需要注意的是組件名稱首字母必須大寫!!!
 

使用VS Code 打開該文件的內容,我們一一講解要點:
 

 

首先看自定義組件的三個主要的部分:

以@+關鍵字部分:主要用於使用Blazor關鍵字指定該組件的特性,例如@page 指定該組件是帶路由功能的。@using 指令引入其他程序集中名稱空間的包, @inject 通過DI引入Service 類,等等。

定義UI的部分: 這個部分使用HTML 標記和C#代碼以及Blazor 指令,代碼塊來定義UI呈現的外觀,

定義代碼部分:在Blazor中使用@code { } 代碼塊來定義 代碼部分,一個組件中可以擁有多個代碼塊,可以定義filed, 屬性,方法三個類型的內容。

 

這裡有一個很重要的概念需要先期理解:Razor 組件的目的是為了UI輸出。所有在Razor組件中的代碼都只有兩個目的一個是輸出UI內容,一個不輸出。因此在第二部分中,Razor的表達式一定是要輸出內容的,這裡大家如果對Razor不熟悉的話,有必要再參考一下前面我翻譯整理的Razor 語法參考。

 

如何進行數據綁定
         數據綁定是什麼?數據綁定的意思是在UI上的一個組件值和組件的屬性說這是filed是一起聯動的,改變組件filed或者屬性的值,UI上的組件值也會相應改變,同時會觸發組件重新渲染,這個設計很重要,後面我們就會看到。圖片上標紅2的地方,我們通過razor 表達式綁定了值,我們並沒有在其上綁定任何監聽的事件,但是點擊列表中的checkbox, 這裡的表達值是自動重新計算的,這就是綁定的魅力,希望大家好好理解。

當前顯示3, 點擊checkbox,  變成4, 但是我們並沒有像在javascript中一樣需要寫監聽的事件,然後由事件更改當前已經完成的事件數,這就是數據綁定的結果:

當然數據綁定的模式本身很簡單,直接使用指令@bind就可以完成綁定了。例如4, 5, 6都是數據綁定的實例。

 


VI. 如何監聽一個事件
監聽事件以@on{事件名稱} = "方法名」 定義一個事件監聽,這些事件例如click事件,雙擊事件,移動滑鼠,數據更新等等。部分支持事件參數的事件描述:

VII. 如何使用單獨的CSS對自定義組件定義全新外觀
 

如果需要對自定義的組件外觀進行重新定義,只需要定義和Razor組件一樣名字的css文件,並放置在同一個目錄就可以了,例如我們自定義的組件名稱叫: Todo.razor, 其CSS文件名稱即為Todo.razor.css, 然後在該CSS文件中定義CSS外觀就可以了。

Blazor會將組件的CSS自定義的獨立文件編譯成一個大的CSS文件,並將會重新定義CSS的名字,形成獨立的名字,不會和其他組件的定義衝突,如下是使用Edge Developer tool 觀察到CSS定義:
 

同時Blazor編譯後的各個組件的獨立的CSS會被放入文件{項目名}.styles.css 的文件中,例如本項目是:

TodoList.styles.css

 

VIII. 如何深入理解Blazor框架是如何對UI進行渲染

這裡要理解的是對於UI的渲染,Blazor 會將所有的組件在內存形成一個基於DOM的圖形樹,當有組件UI更新事件或者Blazor框架直接會和瀏覽器的DOM進行溝通,從而直接渲染頁面。

相關焦點

  • 使用electron+vue開發一個跨平臺todolist(便籤)桌面應用
    # 1最近一直在使用electron開發桌面應用,對於一個web開發者來說,html+javascript+css的開發體驗讓我非常舒服。之前我一直簡單的以為electron只是張網頁加個殼,和那些號稱跨平臺的運行在手機上的webapp是一個套路。
  • ASP.NET Core 和 Blazor 更新 - OSCHINA - 中文開源技術交流社區
    Service 和 gRPC Service Angular 模板更新為 Angular 8 BLazor 模板重命名和簡化更新了 Blazor 模板,以使用一致的命名樣式,並簡化模板的數量:「Blazor(伺服器端)」模板現在被稱為「Blazor Server App」,使用 blaszorserver 從命令行創建一個
  • Todolist-土豆絲:約的人一個都不錯過,看看日程管理軟體如何玩LBS
    除了提醒自己獨做的事情外,和同事約會議,和朋友約會,一個簡單的操作便能輕鬆同步到彼此日程。聯合創始人傅學濤表示,自己平時常常會約朋友去爬山、踢球,都是靠鬧鐘提醒自己、用微信聯繫朋友。對於這樣一個「約人」的場景,目前市面上並沒有一款軟體能很好地實現協同管理。 「希望土豆絲能夠彌補這一空缺,突破現有日程管理工具使用上的低頻性。」
  • 如何在Facebook移動網站和應用上創建相冊
    在Facebook移動版本或應用程式上創建相冊並將照片上傳到相冊並不像在Facebook PC版本網站上那樣簡單。它涉及一些導航,因此這裡有一個簡單的教程,它將幫助您在Facebook移動版本上創建相冊並將照片上傳到您的行動裝置/平板電腦上的相冊。
  • 中文版iOS應用開發教程來襲 開發者無需再啃英文教程
    您將了解 Objective-C(驅動所有 iOS 應用程式和框架的程序設計語言)的編程基礎知識,並將探索 Cocoa Touch 框架。您將創建一個簡單的 iOS 應用程式,並學會在設備上進行測試。最後,您還會學到如何將應用程式提交到 App Store。路線圖中的每個頁面,都介紹一個新主題,並連結到一篇或多篇有關該主題的簡短文章。
  • 【譯】探索更輕量的Electron替代品來託管Blazor桌面應用程式
    一個框架相關的 .NET Core 應用程式的大小可以很容易地在 1MB 以下,而一個獨立的 .NET Core 應用程式(即綁定了自己的 .NET Core 副本)經連結和壓縮後可以減少到約 20MB。各種 Electron 的輕量替代項目已經如雨後春筍般湧現出來[1]。
  • 創建並運行一個新的 Laravel 項目
    而這一切都需要從創建一個新的 Laravel 項目開始。註:本系列教程基於 Laravel 5.7+1、創建一個新的 Laravel 項目正如官方文檔所言,有兩種方式可以創建一個新的 Laravel 項目,這兩種創建方式都是從命令行執行的:第一種是通過全局的 Laravel 安裝器,另一種是通過 Composer 的 create-project 命令。
  • 樂教樂學怎麼批量創建帳號?批量創建帳號教程
    樂教樂學的教師使用者可以用很簡單的操作來實現批量創建學生及家長的帳號。 樂教樂學怎麼批量創建帳號 ?不清楚具體操作的話建議你來看看樂教樂學批量創建帳號教程哦~樂教樂學批量創建帳號教程:1、打開網址,輸入用戶名,密碼登錄。2、點擊左側班級管理,然後點擊右側藍色的班級管理,在新頁面中點擊添加學生。
  • Flutter教程從零構建電商應用(一)
    在這個系列中,我們將學習如何使用google的移動開發框架flutter創建一個電商應用。本文是flutter框架系列教程的第一部分,將學習如何安裝Flutter開發環境並創建第一個Flutter應用,並學習Flutter應用開發中的核心概念,例如widget、狀態等。
  • photoshop教程——創建美麗夢幻般的復古後期
    這張照片將用於教程中使用的原圖創建美麗夢幻般的復古後期處理教程用PHOTOSHOP打開照片首先,您需要在Adobe Photoshop中打開要提供「夢幻復古效果」的照片。要在Photoshop中打開它,請單擊「文件」。
  • 教程-使用Python Kivy構建Android應用程式
    Kivy的意思不是鳥或水果(Kiwi),而是一個Python框架,用於以簡潔,快速和輕鬆的方式構建基於NUI的應用程式。基於MIT許可證,這一框架可以在幾乎所有平臺上運行,例如Windows,Linux,iOS,Android和Raspberry。
  • ps教程:在Photoshop中創建彩色火熱的肖像
    在本教程中,我將向您展示我在Photoshop中創建這個令人敬畏的火熱肖像所採取的步驟。這是一個初學者 - 中級教程,旨在為Photoshop中的圖層混合,選擇和著色技術提供一些實踐。步驟1創建一個大小為800px * 1132px且黑色背景的新文檔。從紋理包中加載以下藍色背景紋理,將其複製並粘貼到我們的文檔中。
  • 如何在微軟Azure中創建無伺服器計算函數應用程式?
    企業不必為創建虛擬機或分配資源付費,有望節省大量資金。可以想像,這對在特定情況下運營的某些企業有極大的吸引力。   微軟Azure提供了屬於雲產品線的函數(Functions)這部分的眾多無伺服器計算服務。本教程介紹了如何使用Azure Portal創建一個簡單的函數應用程式。
  • Ai教程:創建復古線框文本效果
    首先,您將學習如何設置一個簡單的網格,以及如何創建一個非常基本的模式。接下來,您將學習如何使用內置模式創建一個微妙的紋理背景,膠片顆粒感效果,和一些混合技術。最後,您將學習如何使用外觀面板和多個填充和效果創建完全可編輯的文本效果,以及保存的模式和內置的藝術畫筆。你可以在GraphicRiver找到更多的關於如何調整或改進最終的文本效果的靈感。
  • excel中怎麼創建組 excel表格創建分組圖文教程
    excel中怎麼創建組 excel表格創建分組圖文教程時間:2017-08-07 15:38   來源:三聯   責任編輯:沫朵 川北在線核心提示:原標題:excel中怎麼創建組 excel表格創建分組圖文教程 excel創建分組教程: 創建分組步驟1:首先我們新建一個excel文檔。
  • adobe lihgtroom教程—如何在Lightroom中創建粒狀磨砂效果教程
    使用Lightroom創建遮罩效果非常簡單,並且可以通過這些簡單步驟為您的照片提供時尚的電影般外觀。在本教程中,我們將詳細介紹創建遮罩效果的步驟,但是如果您想採用快捷方式,則可以下載包含本教程中使用的所有效果的預設。請記住,您的設置和調整的細節可能會有所不同,具體取決於您正在使用的特定照片,所以不要害怕嘗試一點點。
  • 【教程】應用雙開多開類+簡單教程
    小哥提示本公眾號為非盈利性公眾號,軟體、系統、教程均為網絡搜集,與本公眾號沒有一分錢關係
  • grasshopper系列教程-創建圓形
    今天我們來學習Grasshopper的系列教程,我們今天要學習的內容是關於圓形的創建,圓形的創建也是有多種多樣的方法的,我們最常用的是中心點圓創建,稍微複雜一點的我們可以用切線來創建,圓形在建築設計裡面也是一個非常常用的設計元素,好了,那我們來開始今天的課程吧。
  • C語言快速入門——使用Visual Studio 2015創建控制臺應用程式
    控制臺應用程式也被稱作為命令行程序。在Windows中,命令行界面以名為"命令提示符"的應用程式窗口形式存在。雖然命令行界面在很大程序上已經被圖形界面所替代,但是命令行程序經常比為圖形環境編寫程序更為簡單,因此它得以為開始學習一門新的程序設計語言而得以保留。
  • 最詳細的「國產」作業系統UOS安裝教程,附應用商店切換教程
    俗話說沒有調查就沒有發言權,既然有疑惑,那我們不妨自己安裝一個體驗一下,這究竟是不是一款合格好用的作業系統?本文不做評價,就留給讀者親自體驗吧。授之以魚不如授之以漁,本文就教大家來安裝一下UOS作業系統。由於UOS目前只發布了測試版,目前只推薦大家在虛擬機裡進行安裝,本教程也只基於虛擬機環境。