Blazor 向 ECharts 传递 option

news2024/11/16 17:53:07

目标

  将ECharts封装为Blazor组件,然后通过jsRuntime向ECharts传递参数,即设置option。

封装ECharts

步骤:

1. 在index.html中引入echarts.min.js;

2. 创建blazor组件,将ref传递给js用于初始化echarts;

<div style="@Style" @ref="elementReference"></div>

3. 在js中写初始化代码

window.EChart ={ 
   charts: {},
    init: function (element, id, option) {
        if (element == null)
            return;

        var chart = echarts.init(element);

        c.charts[id] = chart;

        this.setOption(id,option);
    },

    setOption: function (id, option) {
        if (!c.charts[id])
            return;

        if (!option) {
            option = {
                xAxis: {
                    type: 'category',
                    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
                },
                yAxis: {
                    type: 'value'
                },
                series: [
                    {
                        data: [150, 230, 224, 218, 135, 147, 260],
                        type: 'line'
                    }
                ]
            };
        }
        c.charts[id].setOption(option);
    },
}

4. C#调用js的EChart.init函数

public static async Task EChartInit(this IJSRuntime jsRuntime, ElementReference element, Dictionary<string, object> option)
{
    await jsRuntime.InvokeVoidAsync("EChart.init", element, element.Id, option);
}

5. 在Blazor组件渲染完成后调用EChartInit 

        protected override async Task OnAfterRenderAsync(bool firstRender)
        {
            await base.OnAfterRenderAsync(firstRender);

            if (firstRender)
            {
                await JSRuntime.EChartInit(elementReference, Option);
            }
        }

用Dictionary<string,object>传递option

   ECharts里 option配置项是坐标轴、系列、图例、数据集等灵活组合的复杂对象,用C#强类型定义代码量会很大,用弱类型的Dictionary<string,object>来做更灵活,你可以把Dictionary<string,object>视为C#里的JSON。

  我把ECharts官网示例里的data最后数字从260修改为60来测试是否可行:

   调用后画出的曲线:

总结

  C#的jsRuntime序列化机制和ECharts的option对象之间,刚好可以用Dictionary<string,object>做媒,再复杂的对象都可以用Dictionary<string,object>来解构,学问在于里面的object可以是基本类型、对象(还是Dictionary<string,object>)、集合(List<object>),为此我专门做了个工具来定义任意解构的对象,这个万能的弱类型似乎有大用处。

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

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

相关文章

redhat8.6环境下搭建Nextcloud私有云盘

目录 一、nextcoud简介 nextcloud功能&#xff1a; 获取Nextcloud&#xff1a; 二、安装步骤 第一步&#xff1a;编辑网页文件 添加域名管理信息 第二步&#xff1a;上传文件包 将nextcloud包移动到/nextcloud 解压&#xff1a; 也可以使用这个命令&#xff1a; 第三…

TensorFlow 使用 Rust 指南

一、概述 TensorFlow是由 Google Brain 团队开发的强大的开源机器学习框架&#xff0c;已成为人工智能的基石。虽然传统上与 Python 等语言相关&#xff0c;但 Rust&#xff08;一种因其性能和安全性而受到重视的系统编程语言&#xff09;的出现为 TensorFlow 爱好者开辟了新的…

信创生态丨九州未来与openEuler完成兼容互认证

近期&#xff0c;九州未来与openEuler开源社区完成产品兼容性互认证&#xff0c;并获得openEuler技术测评证书。测试结果显示&#xff0c;针对系统构建、兼容性、安全性、性能四个维度&#xff0c;九州未来自主研发的Animbus IaaS V8与openEuler 20.03 LTS SP3版本相互兼容性良…

创新之巅 健康之选 森歌集成灶智能水洗新揭秘

2024年2月27日&#xff0c;一场引领智能厨电风潮的盛会在杭州隆重召开。森歌集成灶以“勠力同心 共生共歌”为主题&#xff0c;成功举办了2024森歌智能厨电优秀经销商峰会。此次峰会上&#xff0c;森歌集成灶发布了令人瞩目的奥运冠军同款智能厨电新品——森歌鲸洗小灶Z60&…

3_相机模型

相机标定对于联系相机测量和真实三维世界测量也很重要。它的重要性在于场景不仅仅是三维的&#xff0c;也是物理单位度量的空间。因此&#xff0c;确定相机的自然单位(像素)与物理单位(如mm)的关系是三维场景重构的重要部分。相机标定的过程既给出相机的几何模型又给出透镜的畸…

从win11切换到ubuntu20的第1天

我不想做双系统&#xff0c;反正win11也没有意思&#xff0c;打游戏直接去网吧&#xff0c;所以电脑直接重装了ubuntu20&#xff0c;为什么不是ubuntu22&#xff1f;因为版本太新&#xff0c;很多东西不支持。为什么不装ubuntu18&#xff1f;因为我电脑装完了之后不支持外界显示…

springboot互联网智能导诊系统源码支持微信小程序

目录 智慧导诊系统开发原理 智慧导诊系统特点&#xff1a; 智能导诊功能介绍 支持通过主诉及症状进行导诊 智慧导诊系统概述 挂号引导 应用场景&#xff1a; 1.智慧医院 2.互联网医院 3.医疗健康平台 智慧导诊系统开发原理 导诊系统从原理上大致可分为基于规则模板和…

Presto简介、部署、原理和使用介绍

Presto简介、部署、原理和使用介绍 1. Presto简介 1-1. Presto概念 ​ Presto是由Facebook开发的一款开源的分布式SQL查询引擎&#xff0c;最初于2012年发布&#xff0c;并在2013年成为Apache项目的一部分&#xff1b;Presto 作为现在在企业中流行使用的即席查询框架&#x…

Outlook邮箱IMAP怎么开启?服务器怎么填?

Outlook邮箱IMAP服务器如何开启&#xff1f;Outlook设置IMAP的方法&#xff1f; Outlook邮箱作为其中的佼佼者&#xff0c;被广大用户所青睐。但在使用Outlook邮箱时&#xff0c;许多用户可能会碰到一个问题&#xff1a;如何开启IMAP服务&#xff1f;下面&#xff0c;蜂邮EDM就…

IOC 和 AOP

IOC 所谓的IOC&#xff08;inversion of control&#xff09;&#xff0c;就是控制反转的意思。何为控制反转&#xff1f; 在传统的程序设计中&#xff0c;应用程序代码通常控制着对象的创建和管理。例如&#xff0c;一个对象需要依赖其他对象&#xff0c;那么它会直接new出来…

瑞_Redis_Redis命令

文章目录 1 Redis命令Redis数据结构Redis 的 key 的层级结构1.0 Redis通用命令1.0.1 KEYS1.0.2 DEL1.0.3 EXISTS1.0.4 EXPIRE1.0.5 TTL 1.1 String类型1.1.0 String类型的常见命令1.1.1 SET 和 GET1.1.2 MSET 和 MGET1.1.3 INCR和INCRBY和DECY1.1.4 SETNX1.1.5 SETEX 1.2 Hash类…

德人合科技 | 公司办公终端、电脑文件数据\资料防泄密管理系统,自动智能无感透明加密保护、防止外泄

德人合科技提供的公司办公终端、电脑文件数据和资料防泄密管理系统是一种高效、智能的解决方案&#xff0c;旨在确保企业数据的安全性和保密性。该系统采用自动智能无感透明加密保护技术&#xff0c;能够在用户无感知的情况下对文件进行加密&#xff0c;从而从源头上保障数据的…

如何利用graylog进行容器化日志管理?

Docker日志 当一个容器启动的时候&#xff0c;它其实是docker deamon的一个子进程&#xff0c;docker daemon可以拿到容器里面进程的标准输出&#xff0c;然后通过自身的LogDriver模块来处理&#xff0c;LogDriver支持的方式很多&#xff0c;默认写到本地文件&#xff0c;也可…

HTML5+CSS3+JS小实例:右键菜单

实例:右键菜单 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><met…

WPF margin属性学习

一开始margin如下&#xff0c;显示如下&#xff1b; margin有四个值的时候是left、top、right、bottom&#xff1b; 如果是Margin“20,10”&#xff0c;则是指left、right设置为20&#xff0c;top、bottom设置为10&#xff1b; 看上去有些问题&#xff0c;现在top为负&#xf…

Docker数据卷-自定义镜像

一.数据卷 1.1数据卷的基本使用 数据卷是一个特殊的目录&#xff0c;用于在Docker容器中持久化和共享数据。 数据卷的主要特点包括&#xff1a; 数据持久性&#xff1a;数据卷允许您在容器的生命周期之外保持数据的持久性。即使容器被删除&#xff0c;数据卷中的数据依然存在&…

在docker中搭建selenium 爬虫环境(3分钟快速搭建)

1、安装docker 省略 2、拉取镜像 docker pull selenium/standalone-chrome-debug 3、运行容器 docker run -d -p 4444:4444 -p 5900:5900 -v C:\Users\Public\VNC_Donwnloads:/home/seluser/Downloads --memory6g --name selenium_chrome selenium/standalone-chrome-debu…

day 45 ● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

#include<bits/stdc.h> using namespace std; int main(){int n,m;cin>>n>>m;vector<int> dp(33,0);dp[0]1;for(int i0;i<n;i){for(int j1;j<m;j){if(i>j)dp[i]dp[i-j];}}// return dp[n];cout<<dp[n]<<endl;} 当然注意 力扣是 …

【全志D1-H 哪吒开发板】Debian系统安装调教和点灯指南

全志D1-H开发板【哪吒】使用Deabian系统入门 特别说明&#xff1a; 因为涉及到操作较多&#xff0c;博文可能会导致格式丢失 其中内容&#xff0c;会根据后续使用做优化调整 目录&#xff1a; 参考资料固件烧录启动调教点灯问题 〇、参考资料 官方资料 开发板-D1开发板【…

基于InternLM和LangChain搭建自己的知识库

背景 LLM存在一定的局限性&#xff0c;如&#xff1a; 知识时效性受限&#xff1a;如何让LLM能够获取最新的知识专业能力有限&#xff1a;如何打造垂直领域的大模型定制化成本高&#xff1a;如何打造个人专属的LLM应用 正文 为了突破LLM的局限性&#xff0c;目前有两种范式…