第二次写专栏,开头仍是不知道说什么,因此……先来段广告😁
《进击吧!Blazor!》是本人与张善友老师合做的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力。
视频地址:https://space.bilibili.com/483888821/channel/detail?cid=151273
本系列文章是基于《进击吧!Blazor!》直播内容编写,升级.Net5,改进问题,讲解更全面。html
每个教程的第一个Demo都是Hello,巧了,Blazor的默认模板就是一个现成的Hello Blazor,咱们就从他的默认模板开始。前端
IDE:Visual Studio 16.8程序员
ASP.NET Core hosted
选项用于控制是否生成带有托管Blazor程序的ASP.NET Core服务端程序,咱们勾上。BlazorToDo.Server
设为启动项,而后启动,应该能看到Hello, world!
下图是项目结构web
Blazor项目,自己就是一个Asp.Net Core项目,若是只作前端,就能够直接拿这个项目进行发布和部署。以后咱们的分享就围绕着这个项目进行。小程序
程序入口,这里与Web项目的差别就是Builder使用了WebAssemblyHostBuilder。c#
1 public static async Task Main(string[] args) 2 { 3 var builder = WebAssemblyHostBuilder.CreateDefault(args); 4 builder.RootComponents.Add<App>("#app"); 5 builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); 6 await builder.Build().RunAsync(); 7 }
全局导入配置,在这里使用using
引入后,至关于在全部razor
文件中都进行了引入。后端
Blazor的根组件,经过Program.cs
中的builder.RootComponents.Add<App>
进行映射。app
静态文件存放位置,用途和Aps.net core相同,里面的index.html文件就是主页框架
<!--index.html--> <body> <div id="app">Loading...</div> <div id="blazor-error-ui"> An unhandled error has occurred. <a href="" class="reload">Reload</a> <a class="dismiss">🗙</a> </div> <script src="_framework/blazor.webassembly.js"></script> </body>
Program.cs
文件中builder.RootComponents.Add<App>("#app");
中的选择器#app
必须能在index.html
中找到正确的元素,否则程序没法正常显示。async
业务组件存放位置,Blazor都是由组件组成的,页面就是含有路由配置的组件。组件文件扩展名razor
,天然使用的是Razor
语法,以Index.razor
文件为例,代码以下
@page "/" <h1>Hello, world!</h1> Welcome to your new app. <SurveyPrompt Title="How is Blazor working for you?" />
Razor
语法的使用方法在后续分享中重点介绍,此处就不展开了。
共享组件存放位置。
服务端程序,也是一个Asp.Net Core项目,能够用他给前端提供WebAPI,而且承载了Client编译的静态文件,若是咱们先后端部署在一块儿,那么直接发布他便可,这也是结构最简单部署方式。
共享项目,这就是Blazor相对于其余前端开发解决方案的最大的优点,Blazor的先后端使用了相同的语言、相同的框架和语言规范。所以咱们能够把先后端共享的代码放入此项目,好比Dto,经常使用组件库,相同的业务等
点击按钮后数字跳动,效果以下
下面是Counter.razor
的代码
@page "/counter" <h1>Counter</h1> <p>Current count: @currentCount</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private void IncrementCount() { currentCount++; } }
代码很简洁,意思以下
currentCount
,要在页面上显示可使用@currentCount
,这里使用@符号从HTML转换为c#。button
中咱们使用@onclick
捕获事件,让他触发IncrementCount
函数,这个函数中累加currentCount
变量。关于razor语法未来后续分享中重点介绍
我将经过一个ToDo示例介绍路由的工做原理,Blazor组件的页面制做方法。