当前位置:   article > 正文

只知道Vue嘛?来看看微软的Blazor

blazor

Blazor 是一个开放源代码和跨平台的Web UI框架,使用 C#代替 JavaScript 来创建丰富的交互式 UI。Blazor支持2种运行模式:Blazor Server模式:应用在ASP.NET Core应用服务器上运行,并且通过SignalR(双向通讯)进行用户交互处理;Blazor WebAssembly 模式:Razor和HTML最终会编译成WebAssembly 运行在支WebAssembly 的浏览器上。

从使用上来看:对.Net开发来说是非常友好的,但是我发现它运行起来是相当的慢,因为要进行编译

代码块:

  1. @{
  2. bool isState = true;
  3. if (isState)
  4. {
  5. <p>显示</p>
  6. }else
  7. {
  8. <p>隐藏</p>
  9. }
  10. }
  11. <p style="color:orangered;">@codeName</p>
  12. @code{
  13. string codeName = "code代码";
  14. }

展示图:

@{} 可以和html中混用,@code {}不能 

 1.数据双向绑定

实例图:

 实现代码:

  1. <div>
  2. <h1 style="color:chocolate">数据双向绑定</h1>
  3. <EditForm Model="@user" OnSubmit="send">
  4. <div>
  5. <label>姓名:</label>
  6. <InputText @bind-Value="@user.name"/>
  7. </div>
  8. <div style="margin-top:12px;">
  9. <label>年龄:</label>
  10. <InputText @bind-Value="@user.age" />
  11. </div>
  12. <button type="submit" style="margin-top:12px;">提交</button>
  13. </EditForm>
  14. <div style="display:flex;margin-top:12px;">
  15. <strong><p>姓名:@user.name</p></strong>
  16. <strong><p>&emsp;&emsp;年龄:@user.age</p></strong>
  17. </div>
  18. </div>
  19. @code{
  20. public User user { get; set; } = new User();
  21. public class User
  22. {
  23. public string name { get; set; }
  24. public string age { get; set; }
  25. }
  26. public void send()
  27. {
  28. System.Console.WriteLine($"姓名:{user.name}\t"+$"年龄:{user.age}");
  29. }
  30. }

提示:这里的双向绑定用到的是@bind,这里的EditForm就是Blaozr自带的表单验证,用普通的Input也可以实现双向绑定!

2.For和if的运用

示例图:

 实现代码:

  1. <div>
  2. <h1 style="color:chocolate">循环的运用</h1>
  3. <strong><p style="font-size:12px;">第一种方式</p></strong>
  4. @for(int i = 0;i<=numbers.Length-1;i++)
  5. {
  6. <p>"值是"@numbers[i]</p>
  7. }
  8. <strong><p style="font-size:12px;">第二种方式</p></strong>
  9. @foreach (var item in numbers)
  10. {
  11. <p>"值是"@item</p>
  12. }
  13. <h1 style="color:chocolate">IF的运用</h1>
  14. <button @onclick="changeState" style="margin-top:12px 0px;">点击改变状态</button>
  15. @*这里绑定了一个点击事件*@
  16. @if (isShowState)
  17. {
  18. <p>现在的状态是:@isShowState</p>
  19. @*如果是true会出现,不是就不会出来这句话*@
  20. }
  21. </div>
  22. @code{
  23. public int[] numbers = {1,2,3,4};
  24. public bool isShowState { get; set; } = true;
  25. public void changeState()
  26. {
  27. if(!isShowState)
  28. {
  29. isShowState = true;
  30. }else
  31. {
  32. isShowState = false;
  33. }
  34. }
  35. }

3.组件

注意:blazor的组件有一个注意点首写字母要大写,不要出现符号 

引用组件代码

 组件C#代码分离

   1.在类上面继承ComponentBase

  1. public class IndexCode : ComponentBase
  2. {
  3. public string sentence = "分离组件与代码";
  4. }

  2.在组件页面用@inherits注入就可以用来

  1. @inherits IndexCode
  2. <p>@sentence</p>

 4.路由

app.razor文件可以看到路由视图的定义,这个称之为路由模板,当找到相匹配的视图时,会在<Found></Found>节点里面渲染出来,如果没有的话会在<NotFound></NotFound>节点里面渲染,当然你也可以自定义一个404的页面。

 怎么写路由呐?简单的一批

 我们在我们刚刚的写的组件上面改进,加上@page "/路由路径"

路由怎么用呐?

  1. @inject NavigationManager navigationto
  2. <div>
  3. <a href="/MyComponent">A标签跳转</a>
  4. </div>
  5. <div>
  6. <button @onclick="navigationClick" style="margin-top:12px;">点击跳转</button>
  7. @*如果是点击跳转记到注入NavigationManager*@
  8. </div>
  9. @code{
  10. public void navigationClick()
  11. {
  12. navigationto.NavigateTo("/MyComponent");
  13. }
  14. }

带参数路由: 

  1. @page "/{sentencs}"
  2. <p>RouteParma:@sentencs</p>
  3. @code {
  4. [Parameter]
  5. public string sentencs { get; set; }
  6. }

 效果图:

 5.布局(我这里布局一个登录页)

第一步在shared目录下面建一个母版

代码:

  1. @inherits LayoutComponentBase @* 这里表示声明一个母版 *@
  2. @Body @* body是占位 *@
  1. @page "/"
  2. @layout LoginLayout @* 这里表示使用 *@
  3. <style>
  4. * {
  5. height :100vh;
  6. width : 100vw;
  7. }
  8. .wrapper {
  9. height: 100vh;
  10. background-image: linear-gradient(to bottom right, #FC466B , #3F5EFB);
  11. overflow: hidden;
  12. }
  13. </style>
  14. <div class="wrapper">
  15. <div style="margin: 200px auto; background-color: #fff; width: 350px; height: 300px; padding: 20px; border-radius: 10px">
  16. </div>
  17. </div>

效果图: 

6.C#调Js 

第一步在wooroot目录下面建一个js文件

Js代码

  1. window.sayHello = (name) => {
  2. return "Hello," + name;
  3. }

 第二步在刚刚那个目录的index.html引用

 测试代码:

  1. @page "/JsInvok"
  2. @inject IJSRuntime js
  3. <button class="btn btn-success" @onclick="JsInvokClick">测试调Js</button>
  4. <strong><p style="margin-top:12px;color:coral">@Result</p></strong>
  5. @code {
  6. public string Result { get; set; }
  7. public async void JsInvokClick()
  8. {
  9. Result = await js.InvokeAsync<string>("sayHello","Blazor");
  10. }
  11. }

效果图: 

注意:这里用到了@inject IJSRuntime来调用Js

 7.Balzor发送网络请求,周天更新

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/858697
推荐阅读
  

闽ICP备14008679号