前言

BlazorChartjs是一个在Blazor中使用Chart.js的库(支持Blazor WebAssembly和Blazor Server两种模式),它提供了简单易用的组件来帮助开发者快速集成数据可视化图表到他们的 Blazor 应用程序中。本文我们将一起来学习一下在Blazor中使用Chart.js快速创建图表。

Blazor是什么?

Blazor是一种新兴的Web应用程序框架,具有很大的潜力和发展前景。Blazor是在.NET和Razor上构建的用户界面框架,它采用了最新的Web技术和.NET框架优势,可以使用C# 编程语言编写Web 应用程序,它不仅可以提高开发效率,还可以提供更好的用户体验和更好的可维护性。

详细介绍可以看这篇文章:全面的ASP.NET Core Blazor简介和快速入门

创建Blazor WebAssembly应用

创建名为ChartjsExercise的Blazor WebAssembly应用:

安装NuGet

安装PSC.Blazor.Components.Chartjs包:

添加以下脚本

打开index.html文件,在页面末尾添加以下脚本:

<script src="_content/PSC.Blazor.Components.Chartjs/lib/Chart.js/chart.js"></script>
<script src="_content/PSC.Blazor.Components.Chartjs/Chart.js" type="module"></script>

引入组件

打开你的_Imports.razor文件并添加以下内容:

@using PSC.Blazor.Components.Chartjs
@using PSC.Blazor.Components.Chartjs.Enums
@using PSC.Blazor.Components.Chartjs.Models
@using PSC.Blazor.Components.Chartjs.Models.Common
@using PSC.Blazor.Components.Chartjs.Models.Bar
@using PSC.Blazor.Components.Chartjs.Models.Bubble
@using PSC.Blazor.Components.Chartjs.Models.Doughnut
@using PSC.Blazor.Components.Chartjs.Models.Line
@using PSC.Blazor.Components.Chartjs.Models.Pie
@using PSC.Blazor.Components.Chartjs.Models.Polar
@using PSC.Blazor.Components.Chartjs.Models.Radar
@using PSC.Blazor.Components.Chartjs.Models.Scatter

柱状图

创建BarSimple.razor组件:

razor页面代码

@page "/BarSimple"
@using ChartjsExercise.Model
<h3>柱状图</h3>

<Chart Config="_config" @ref="_chart" Height="500px"></Chart>

@code {
    private BarChartConfig? _config;
    private Chart? _chart;

    protected override async Task OnInitializedAsync()
    {
        _config = new BarChartConfig()
            {
                Options = new Options()
                {
                    Responsive = true,
                    MaintainAspectRatio = false,
                    Plugins = new Plugins()
                    {
                        Legend = new Legend()
                        {
                            Align = Align.Center,
                            Display = true,
                            Position = LegendPosition.Right
                        }
                    },
                    Scales = new Dictionary<string, Axis>()
                {
                    {
                        Scales.XAxisId, new Axis()
                        {
                            Stacked = true,
                            Ticks = new Ticks()
                            {
                                MaxRotation = 0,
                                MinRotation = 0
                            }
                        }
                    },
                    {
                        Scales.YAxisId, new Axis()
                        {
                            Stacked = true
                        }
                    }
                }
                }
            };

        _config.Data.Labels = BarSimpleData.SimpleBarText;
        _config.Data.Datasets.Add(new BarDataset()
            {
                Label = "Value",
                Data = BarSimpleData.SimpleBar.Select(l => l.Value).ToList(),
                BackgroundColor = Colors.Palette1,
                BorderColor = Colors.PaletteBorder1,
                BorderWidth = 1
            });
    }
}

BarSimpleData

    public class BarSimpleData
    {
        public static List<string> SimpleBarText = new List<string>() { "一月", "二月", "三月", "四月", "五月", "六月", "七月" };
        public static List<DataItem> SimpleBar = new List<DataItem>()
        {
            new DataItem() { Name = "一月", Value = 65 },
            new DataItem() { Name = "二月", Value = 59 },
            new DataItem() { Name = "三月", Value = 80 },
            new DataItem() { Name = "四月", Value = 81 },
            new DataItem() { Name = "五月", Value = 56 },
            new DataItem() { Name = "六月", Value = 55 },
            new DataItem() { Name = "七月", Value = 40 }
        };
    }

展示效果

饼图

创建PieSimple.razor组件:

razor页面代码

@page "/PieSimple"
@using ChartjsExercise.Model
<h3>饼图</h3>

<Chart Config="_config" @ref="_chart" Height="500px"></Chart>

@code {
    private PieChartConfig? _config;
    private Chart? _chart;

    protected override async Task OnInitializedAsync()
    {
        _config = new PieChartConfig()
            {
                Options = new PieOptions()
                {
                    Responsive = true,
                    MaintainAspectRatio = false
                }
            };

        _config.Data.Labels = PieSimpleData.SimplePieText;
        _config.Data.Datasets.Add(new PieDataset()
            {
                Label = "数据集",
                Data = PieSimpleData.SimplePie.ToList(),
                BackgroundColor = Colors.PaletteBorder1,
                HoverOffset = 4
            });
    }
}

PieSimpleData

    public class PieSimpleData
    {
        public static List<string> SimplePieText = new List<string>() { "一月", "二月", "三月", "四月" };
        public static List<decimal?> SimplePie = new List<decimal?>() { 300, 50, 100, 20 };
    }

展示效果

折线图

创建LineSimple.razor组件:

razor页面代码

@page "/LineSimple"
@using ChartjsExercise.Model

<h3>折线图</h3>

<Chart Config="_config" @ref="_chart" Height="500px"></Chart>

@code {
    private LineChartConfig? _config;
    private Chart? _chart;

    protected override async Task OnInitializedAsync()
    {
        _config = new LineChartConfig()
        {
        };

        _config.Data.Labels = LineSimpleData.SimpleLineText;
        _config.Data.Datasets.Add(new LineDataset()
            {
                Label = "数据集",
                Data = LineSimpleData.SimpleLine.ToList(),
                BorderColor = Colors.PaletteBorder1.FirstOrDefault(),
                Tension = 0.1M,
                Fill = false,
                PointRadius = 15,
                PointStyle = PointStyle.Cross
            });
    }

    private void AddValue()
    {
        Random rd = new Random();
        _chart.AddData(new List<string?>() { "August" }, 0, new List<decimal?>() { rd.Next(0, 200) });
    }
}

LineSimpleData

    public class LineSimpleData
    {
        public static List<string> SimpleLineText = new List<string>() { "一月", "二月", "三月", "四月", "五月", "六月", "七月" };
        public static List<decimal?> SimpleLine = new List<decimal?>() { 65, 59, 80, 81, 86, 55, 40 };
        public static List<decimal?> SimpleLine2 = new List<decimal?>() { 33, 25, 35, 51, 54, 76, 60 };
        public static List<decimal?> SimpleLine3 = new List<decimal?>() { 53, 91, 39, 61, 39, 87, 23 };
    }

展示效果

配置菜单导航栏

在组件NavMenu.razor中配置:

<div class="top-row ps-3 navbar navbar-dark">
    <div class="container-fluid">
        <a class="navbar-brand" href="">ChartjsExercise</a>
        <button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
</div>

<div class="@NavMenuCssClass nav-scrollable" @onclick="ToggleNavMenu">
    <nav class="flex-column">
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="BarSimple">
                <span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>柱状图
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="PieSimple">
                <span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>饼图
            </NavLink>
        </div>
        <div class="nav-item px-3">
            <NavLink class="nav-link" href="LineSimple">
                <span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>折线图
            </NavLink>
        </div>
    </nav>
</div>

@code {
    private bool collapseNavMenu = true;

    private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }
}

更多图表效果截图

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看,别忘了给项目一个Star支持。

GitHub开源地址:https://github.com/erossini/BlazorChartjs

ChartjsExercise文章示例:https://github.com/YSGStudyHards/DotNetExercises/tree/master/ChartjsExercise

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没)。

https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群

在Blazor中使用Chart.js快速创建图表的更多相关文章

  1. 在Blazor中使用Chart.js

    1. 在Blazor中使用Chart.js 首先,从Chart.js官方网站下载Chart.js库文件. 推荐下载这个构建好的版本https://cdnjs.com/libraries/Chart.j ...

  2. Bounce.js – 快速创建漂亮的 CSS3 动画效果

    Bounce.js 是一个用于制作漂亮的 CSS3 关键帧动画的 JavaScript 库,使用其特有的方式生成的动画效果.只需添加一个组件,选择预设,然后你就可以得到一个短网址或者导出为 CSS 代 ...

  3. chart.js 里添加图表的清单:

    chart.js 里添加图表的清单: var legend = myDoughnut.generateLegend(); $("#chart_legend").html(legen ...

  4. Blazor和Vue对比学习(知识点杂锦3.04):Blazor中C#和JS互操作(超长文)

    C#和JS互操作的基本语法是比较简单的,但小知识点特别多,同时,受应用加载顺序.组件生命周期以及参数类型的影响,会有比较多坑,需要耐心的学习.在C#中调用JS的场景会比较多,特别是在WASM模式下,由 ...

  5. Ionic中使用Chart.js进行图表展示以及在iOS/Android中的性能差异

    Angular Chart 简介 在之前的文章中介绍了使用 Ionic 开发跨平台(iOS & Android)应用中遇到的一些问题的解决方案. 在更新0.1.3版本的过程中遇到了需要使用图表 ...

  6. vue中使用chart.js

    1,安装chart.js和vue-chart.js npm install chart.js --save npm install vue-chart.js --save 2,独立文件,方便修改 封装 ...

  7. angulajs中引用chart.js做报表,修改线条样式

    目前还有个问题,在手机上看,当折线y轴值超过1000,会有点问题 1.下载chart js,可以用bower 命令下载 http://www.chartjs.org/docs/#line-chart- ...

  8. 使用Slip.js快速创建整屏滑动的手机网页

    原文  http://segmentfault.com/blog/laopopo/1190000000708417 现在滑屏网页越来越多,比如我在搜狐视频就做了好几个,举个例子,可以用手机扫描以下的二 ...

  9. Node.js快速创建一个Express应用的几个步骤

    Node.js 的 Express 框架学习 转载和参考地址: https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Express_N ...

  10. Sale.js——快速创建促销样式

    小菜编写的又一款jQuery小插件,有兴趣的朋友可以试试~ 简介: 对于一个用于产品展示.销售的网站而言,很可能需要一种促销的特效. 一般而言,我们会在商品图片前加一个促销栏,写上一些促销标语.原价. ...

随机推荐

  1. Delphi TStringList 有趣的CommaText和DelimitedText

    CommaText 在没有指定StrictDelimiter=true的情况下,当列表中项中 包含 空格和逗号的时候就默认的 在这个字符串上面 增加 双引号 很智能吧 例子1: var MyList: ...

  2. Spark相关面试题

    Spark Core面试篇01 一.简答题 1.Spark master使用zookeeper进行HA的,有哪些元数据保存在Zookeeper? 答:spark通过这个参数spark.deploy.z ...

  3. Windows终端的一些配置

    前言 记录早前拿到新的笔记本(win10)后配置命令行的过程,以下是环境: 命令行 : CMD,PowerShell7 Shell :Windows Terminal 设置编码格式(当前代码页)为UT ...

  4. NVME学习笔记六—Controller Architecture

    Controller架构   NVMe over Fabrics使用与NVMe基础规格说明书中定义相同的controller架构.这包括主机和controller之间使用SQ提交队列和CQ完成队列来执 ...

  5. 基于Android的“哲学家就餐问题”防死锁的设计与实现

    1问题描述 如图1.1,有5个哲学家围着一个大圆桌就餐.哲学家和筷子都按逆时针顺序编号,每个哲学家的编号与他左边的筷子的编号一致. 规定如下: (1)哲学家之间不相互交流: (2)哲学家只做两件事:吃 ...

  6. 微信小程序云开发项目-个人待办事项-01介绍

    项目简介 这个小程序项目做的是个人待办事项管理小程序,也就是大家常见的todo类程序.做这个程序主要是为了演示如何快速得学习到微信小程序一些基本得组件.路由.云函数开发技巧.有需要的朋友可以拿去自己改 ...

  7. GYM-A. Golden Spirit等

    1.题目链接:Problem - A - Codeforces 题意:桥两边有2 * n个不能独立过桥的老人,老人想到对面休息 re 分钟后返回原位置,每次过桥需要花费 cr 分钟,问最少需要多长时间 ...

  8. virtualenvwrapper管理虚拟环境

    安装 pip install virtualenvwrapper-win 基本使用 1.创建虚拟环境 mkvirtualenv my_env 使用这个命令,就会在你c盘的当前用户下创建一个Env的文件 ...

  9. Redis高级系列详解

    01-Redis系列之-Redis介绍安装配置 02-Redis系列之-架构和高级API的使用 03-Redis系列之-高级用法详解 04-Redis系列之-持久化(RDB,AOF) 05-Redis ...

  10. Redis高级数据类型

    ## 1.Redis相关配置信息 服务器端设定 设置服务器以守护进程的方式运行 daemonize yes|no 绑定主机地址 (只能此ip访问) bind 127.0.0.1 设置服务器端口号 po ...