《进击吧!Blazor!》系列入门教程 第一章 7.图表

作者备注

《进击吧!Blazor!》是本人与张善友老师合作的Blazor零基础入门系列视频,此系列能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力。
视频地址:https://space.bilibili.com/483888821/channel/detail?cid=151273

Blazor WebAssembly 是单页应用 (SPA) 框架,用于使用 .NET 生成交互式客户端 Web 应用,采用 C# 代替 JavaScript 来编写前端代码

本系列文章因篇幅有限,省略了部分代码,完整示例代码:

https://github.com/TimChen44/Blazor-ToDo

第一章

6.安全

图表的作用我就不扯了,想要让系统高大上就少不了它,作为一个加分项,我们自然也要给我们ToDo引用来一波。

目录

Chart控件选择

改造ToDo

1.引用组件

2.统计页

3.迷你图

次回预告

Chart控件选择

目前还没有比较优秀的Blazor原生Chart控件,这也是我们将来需要提升Blazor生态的重要任务之一。

但是无需失望,Blazor支持C#调用JS,反之亦可,所以社区中有不少通过此技术对现有JS版本的Chart控件二次分装的Blazor组件可用。

这里我就推荐本人封装G2Plot后的Blazor组件ant-design-charts-blazor。

文档地址:https://ant-design-blazor.gitee.io/zh-CN/charts/introduce

源码地址:https://github.com/ant-design-blazor/ant-design-charts-blazor

技术实现方式介绍:https://zhuanlan.zhihu.com/p/163808856

改造ToDo

1.引用组件

通过命令或可视化界面为ToDo.Client添加AntDesign.Charts组件

$ dotnet add package AntDesign.Charts

在 wwwroot/index.html(WebAssembly) 或 Pages/_Host.razor(Server) 中引入静态文件:

<script src="https://unpkg.com/@antv/g2plot@latest/dist/g2plot.js"></script>
<script src="_content/AntDesign.Charts/ant-design-charts-blazor.js"></script>

在 _Imports.razor 中加入命名空间

@using AntDesign.Charts

将Charts命名空间加入全局引用,拥有使用时省略完整命名路径的好处,但是请注意当Chart中的组件与其他组件重名时,不论Chart组件还是其他组件都需要补上完整命名路径,考虑到Chart使用的页面并不多,所以本人的习惯不会将他加入 _Imports.razor中。

2.统计页

我们用柱状图做一个每日代办事项数量统计图

ChartAmountDto.cs

在ToDo.Shared项目中创建用于显示数据的实体。

public class ChartAmountDto
{public string Day { get; set; }public string Type { get; set; }public int Value { get; set; }
}

Day字段存储日期文本。

Type存储重要度信息,包含“普通”,“重要”两个值,图表中也是用这个进行分组显示。

Value存储具体的数值。

ChartController.cs

在ToDo.Server项目新建ChartController控制器,用于提供图表所需的数据。

[ApiController]
[Route("api/[controller]/[action]")]
public class ChartController
{TodoContext Context;public ChartController(TodoContext context){Context = context;}//每日待办数量public List<ChartAmountDto> GetAmountDto(){return Context.Task.GroupBy(x => new { x.PlanTime, x.IsImportant }).Select(x => new ChartAmountDto(){Day = x.Key.PlanTime.ToString("yy-MM-dd"),Type = x.Key.IsImportant ? "普通" : "重要",Value = x.Count(),}).ToList();}
}

通过对计划日期和重要度进行分组,然后对分组结果进行计数,接口返回的部分数据结构如下

[{"day":"20-09-25","value":2,"type":"重要"},{"day":"20-10-10","value":9,"type":"重要"},{"day":"20-10-11","value":6,"type":"重要"},{"day":"20-10-14","value":2,"type":"重要"},{"day":"20-10-17","value":6,"type":"重要"},{"day":"21-01-28","value":1,"type":"重要"}
]

Statistics.razor

在ToDo.Client项目添加Statistics.razor并填入以下代码

@page "/statistics"<Spin Spinning="isLoading"><AntDesign.Charts.StackedColumn @ref="@amountChart" Config="amountConfig" TItem="ChartAmountDto" />
</Spin>

AntDesign.Charts.StackedColumn 通过完整的路径添加图表控件。

@ref="@amountChart" 提供了一种引用组件实例的方法,随后可以申明一个变量存放组件的引用。

Config="amountConfig" 配置图表显示配置。

TItem="ChartAmountDto" 定义图表数据类型。

添加Statistics.razor.cs文件。

public partial class Statistics
{[Inject] public HttpClient Http { get; set; }bool isLoading = false;IChartComponent amountChart;readonly StackedColumnConfig amountConfig = new StackedColumnConfig{Title = new Title{Visible = true,Text = "每日代办数量统计"},ForceFit = true,Padding = "auto",XField = "day",YField = "value",YAxis = new ValueAxis{Min = 0,},Meta = new{day = new{Alias = "日期"},},Color = new[] { "#ae331b", "#1a6179" },StackField = "type"};protected async override Task OnInitializedAsync(){isLoading = true;var amountData = await Http.GetFromJsonAsync<List<ChartAmountDto>>($"api/Chart/GetAmountDto");await amountChart.ChangeData(amountData);await base.OnInitializedAsync();isLoading = false;}
}

IChartComponent amountChart;变量用来存放组件实例引用,之后我们就可能使用这个对象对Chart组件进行各类操作。

StackedColumnConfig amountConfig定义了堆积柱状图的配置

  • Text = "每日代办数量统计" 定义了标题文本

  • XField = "day" X轴绑定的字段名

  • YField = "value" Y轴绑定的字段名

注意:此处绑定字段名是区分大小写的,通常c#的dto类字段名会采用大驼峰,然而将dto转json默认模式下会将字段名改成小驼峰格式,所以注意此处字段名的差异。

  • Meta = new { day = new { Alias = "日期" } } 定义day字段所在州轴显示的文本

  • Color = new[] { "#ae331b", "#1a6179" } 柱状图的颜色,如果不指定,组件会使用默认颜色

  • StackField = "type"定义了堆砌的字段

更多的属性配置可以详见G2Plot组件的文档:

https://antv-g2plot.gitee.io/zh/examples/gallery

MainLayout.razor

添加统计菜单项

<MenuItem RouterLink="/statistics" RouterMatch="NavLinkMatch.Prefix">统计
</MenuItem>

运行效果

3.迷你图

图表,图表,有图有表,所以我们需要将我们的图表与我们的代办列表集合。

我们的代办记录中有计划日期和截至日期,所以我们可以结合当前日期就能做出一个剩余时间进度迷你图。

TaskItem

TaskItem.razor中添加以下代码

<div class="chart">@{double progress = 0;if (Item.IsFinish == false && Item.Deadline.HasValue)progress = (double)Item.Deadline.Value.Subtract(DateTime.Now).TotalHours / (double)Item.Deadline.Value.Subtract(Item.PlanTime).TotalHours;}<AntDesign.Charts.RingProgress Data="progress" Config="progressConfig"></AntDesign.Charts.RingProgress>
</div>

我们先计算剩余时间,结果数值区间在0~1之间,然后使用RingProgress组件显示,如果已经完成的任务默认值为0。

AntDesign.Charts.RingProgress 圆形进度迷你图。

Data="progress" 图表数值

Config="progressConfig" 图表配置

最后添加一些样式,位置上美化一下

.task-card-item .chart {margin-left: 8px;
}

在TaskItem.razor.cs中添加迷你图配置

readonly RingProgressConfig progressConfig = new RingProgressConfig
{Width = 30,Height = 30,
};

运行效果

随着时间流逝,剩余时间减少,圆形精度蓝色部分会越来越少

次回预告

第一章 8.站点部署

下次将迎来Todo应用的最终回,我们通过一些虚拟场景来演示如何部署Blazor应用。

学习资料

更多关于Blazor学习资料:https://aka.ms/LearnBlazor

MSReactor

扫码|关注我们

Bilibili|微软Reactor_SH

新浪微博|MSReactorShanghai

知乎|微软 Reactor

球分享

球点赞

球在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 最好 入门_C++和Java哪个比较好入门?初学者该如何选择?

选择好的方向比努力更重要&#xff0c;对于初学编程的人来说选择一门合适的编程语言关系到自己以后的职业发展。c和Java那个更适合作为入门语言?给大家简单科普一下~C语言它是正宗的C语言的嫡系&#xff0c;由C语言发展而来。C支持多种编程范式 --面向对象编程、泛型编程和过程…

为什么要实施服务器虚拟化

实施了服务器虚拟化能为我们带来什么&#xff1f;1.基础架构的利用率。通过将基础架构资源池化并打破一个应用一台物理机的藩篱&#xff0c;虚拟化大幅提升了资源利用率。通过减少额外硬件的采购&#xff0c;企业可以获得大幅成本节约。2. 安全性。通过将操作系统和应用从服务器…

一日一技:ASP.NET Core Api网关Ocelot初探

概述Ocelot面向使用.NET运行微型服务/面向服务的体系结构的人员&#xff0c;这些体系结构需要在系统中具有统一的入口点。特别是我想与IdentityServer参考和承载令牌轻松集成。Ocelot是按特定顺序排列的一堆中间件。Ocelot将HttpRequest对象操作到由其配置指定的状态&#xff0…

盘点那些让程序员目瞪口呆的Bug都有什么?

程序员一生与bug奋战&#xff0c;可谓是杀敌无数&#xff0c;见怪不怪了&#xff01;在某知识社交平台中&#xff0c;一个“有哪些让程序员目瞪口呆的bug”的话题引来了6700多万的阅读&#xff0c;可见程序员们对这个话题的敏感度有多高。1、麻省理工“只能发500英里的邮件”该…

mysql heartbeat 慢_MySQL 主从延迟监控脚本(pt-heartbeat)

对于MySQL数据库主从复制延迟的监控&#xff0c;我们可以借助percona的有力武器pt-heartbeat来实现。pt-heartbeat通过使用时间戳方式在主库上更新特定表&#xff0c;然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟。本文主要是通过脚本来定期检查从库与主…

asp.net中的窗体身份验证(分目录验证篇)

在上一篇博文《asp.net中的窗体身份验证&#xff08;最简单篇&#xff09;》中的身份验证虽然很简单&#xff0c;但是有一个缺点&#xff0c;就是访问整个网站都必须要经过身份验证&#xff0c;而事实上&#xff0c;很多网站都不会这么要求的。 比如一个新闻系统&#xff0c;通…

这本 “写不完” 的黑科技笔记本,恐怕要颠覆整个行业!

这是一本可以“阅后即焚”的笔记本&#xff1f;别想太多这个“焚”不是那个“焚”哦~TA非常神奇&#xff01;风筒吹吹&#xff0c;笔记本上字迹都会自动消失。what&#xff1f;&#xff08;暂时保密&#xff0c;一会见证奇迹&#xff09;每个人在步入学生时代&#xff0c;到社会…

.NET 6 Preview 2 发布

前言在 2021 年 3 月 11 日&#xff0c; .NET 6 Preview 2 发布&#xff0c;这次的改进主要涉及到 MAUI、新的基础库和运行时、JIT 改进。.NET 6 正式版将会在 2021 年 11 月发布&#xff0c;支持 Windows、macOS、Linux、Android 和 iOS 等系统以及 x86、x86_64、ARM 和 ARM64…

mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据

传统解法用全量备份重搭实例&#xff0c;再利用增量binlog备份&#xff0c;恢复到误操作之前的状态。然后跳过误操作的SQL&#xff0c;再继续应用binlog。此法费时费力&#xff0c;不值得再推荐。利用binlog2sql快速闪回首先&#xff0c;确认你的MySQL server开启了binlog&…

RHEL5.1下安装GCC

RHEL5.1下安装GCC 2010年08月17日 星期2 14&#xff1a;00 一、环境说明 由于用的是默认安装&#xff0c;所以说GCC也没有装进去。 GCC在安装源码包时要用到的一个组件&#xff0c; 开始安装&#xff1a;按顺序安装以下包就可以完成GCC的安装了 [roottest tools]# uname -a L…

你见过的“垃圾”项目是这样子么?

大家好&#xff0c;我是Z哥。我相信每一位程序员最怕遇到代码质量堪忧的项目&#xff0c;毕竟增加一个同样的功能&#xff0c;在一个代码整洁、清晰的项目里与在一个代码混乱不堪的项目里&#xff0c;效率和质量上的差距达到一个数量级一点也不奇怪。但是残酷的现实是&#xff…

[转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)

目的&#xff1a;1.ArcGIS API for Flex实现Toolbar功能&#xff0c;包括ZoomIn、ZoomOut、Pan、PrevExtent、NextExtent、FullExtent功能。准备工作&#xff1a;1.这次地图数据就用Esri提供的http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/Ma…

mysql使用索引下推的好处_mysql的索引下推理解和实践

对于mysql建表稍有点经验的开发人员都会为后续的where查询条件提前考虑创建索引。这里说的是在使用索引查询时有关索引下推的有关知识点。综合前人的经验结果&#xff1a;索引下推是数据库检索数据过程中为减少回表次数而做的优化。判断是否需要回表的是由mysql存储引擎控制&am…

物理学家史蒂夫·霍金逝世,享年76岁(附图文回顾他的一生)

3月14日消息&#xff0c;据英国天空新闻等多家媒体报道&#xff0c;史蒂芬威廉霍金&#xff08;Stephen William Hawking&#xff09;去世&#xff0c;享年76岁&#xff08;1942年1月8日&#xff0d;2018年3月14日&#xff09;。这一消息已经得到霍金家人确认。霍金的三个孩子露…

mysql数据库熟悉表空间数据文件_Oracle表空间和数据文件

Oracle创建表空间 1.创建普通表空间create tablespace oracle_tablespacedatafileOracle创建表空间1.创建普通表空间create tablespace oracle_tablespacedatafile /home/oracle/oradata/orcl/oracle_tablespace.dbfsize 100mautoextend on next 10M maxsize 200Mextent manage…

CSRobot gen:mysql,pg-c#类型映射

下面的数据库类型和c#类型的映射关系&#xff0c;只是我个人的想法&#xff0c;应该不同的业务场景对应可能不一样&#xff0c;比如json&#xff0c;xml&#xff0c;line&#xff0c;polygon结构化的数据&#xff0c;如果在C#中有对应的实体类&#xff0c;可以很友好的转换&…

HTTP header中的 Cache-control

网页的缓存是由HTTP消息头中的“Cache-control”来控制的&#xff0c;常见的取值有private、no-cache、max-age、must-revalidate等&#xff0c;默认为private。其作用根据不同的重新浏览方式分为以下几种情况&#xff1a;&#xff08;1&#xff09; 打开新窗口如果指定cache-c…

2018年最值得关注的15大技术趋势,区块链将得到更广泛的应用

通常情况下&#xff0c;技术趋势是很难准确预测的&#xff0c;因为预测未来本身就极其困难。但是我们还是可以从过往的一些显著数据指标来推测新的一年里科技行业的发展趋势。2018&#xff0c;有哪些值得关注的技术趋势&#xff1f;01 区块链将得到更广泛的应用

mtu值修改

ping -f -l 1472 192.168.0.1转载于:https://blog.51cto.com/xiaohe027/382282

Visual Studio项目引用出现感叹号怎么办?

原因可能有多种&#xff1a;第一种问题&#xff1a;解决方式1&#xff1a;今天换了台电脑&#xff0c;就把笔记本上的项目拷贝到了台式机上&#xff0c; 但是我没有拷贝解决方案整个文件夹&#xff0c;因为其中项目太多了&#xff0c;我就把其中一个项目的文件夹直接拷贝到电脑…