导读

如果想在一个页面里实例化带分类筛选的多个Echarts该怎么做呢?

曾探讨了带分类选择的关系图显示为自定义图片的需求实现,传送门ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)

本篇将着重介绍如何根据后台返回的列表数据,实例化多个Echarts,对应所用技术点:Asp.Net MVC & Razor 视图引擎

最终产品效果图

产品需求几经变化,由加载全部图表到默认只展示一个图表,再到节点展示改为图像等;

加载全部图表,多个ECharts

默认只展示一个图表,有分类筛选功能

默认只展示一个图表,节点展示改为图像,有分类筛选功能

实现思路

带有筛选功能展示不同Echarts图表,而不是一个ECharts图表里的筛选功能,此需求实现,采用一次性实例化多个ECharts,隐藏掉其余实例,而不是切换分类时请求数据,进行实例化。

后台返回数据在razor视图模板里接收

@{
Layout = "~/Views/Shared/_xkLayout.cshtml"; List<xk_group> listGroup = ViewBag.Group;
List<ScholarDto> list = ViewBag.List;
List<IGrouping<long?, ScholarDto>> listGrouping = ViewBag.Grouping;
}

html代码,含c#语法

  <div class="rc left" id="ResultData">
<!--学者-->
<div class="scholar"> <div class="choose clearfix">
@if (listGrouping != null && listGrouping.Count > 0)
{
foreach (var item in listGrouping)
{
<a href="javascript:;" data-groupid="@item.Key" data-groupname="@item.FirstOrDefault().GroupName">@item.FirstOrDefault().GroupName</a>
}
}
</div>
@if (listGroup != null && listGroup.Count > 0)
{
foreach (var item in listGroup)
{
<div name="scholarRechart">
@*<h1>研究“@(item.GroupName)”的学者</h1>*@
<div id="relationChart_@item.GroupId" data-groupid="@item.GroupId" data-groupname="@item.GroupName" style="width: 600px; height: 400px;"> </div>
</div> }
}
</div>
</div>

js代码 实例化多个ECharts

    @if (listGrouping != null && listGrouping.Count > 0)
{ foreach (var item in listGrouping)
{
<text>
@*var groupName = "@item.FirstOrDefault().GroupName";*@
$(function () {
var nodes_@item.Key = [{
//category: 0,
name: "@item.FirstOrDefault().GroupName",
//color: "green", symbol: "circle",//"image://http://thumb12.jfcdns.com/2018-06/bce5b231ad7df722.png",
symbolSize: 100,
size: 100,
label: "@item.FirstOrDefault().GroupName",
x: null,
y: null,
draggable: true,
//cursor:"pointer",
label: {
show: true,
textStyle: {
color: '#333',
fontSize: 18,
fontWeight: "bolder" },
position: 'inside',//标签位置
//distance: 50//标签距离图形的距离
},
}];
var links_@(item.Key) = [];
@*var legendData_@(item.Key) = [];*@
@{
var subList = item.ToList();
if (subList != null && subList.Count > 0)
{ foreach (var subItem in subList)
{
<text> nodes_@(item.Key).push({
//category: 1,
name: "@subItem.RealName",
//color:"green",
symbol: 'image://@ProductConfigHelper.DomainXinKeUrl/imagesTemp/potrait/0@(random.Next(1,6)).png',
symbolSize: 60,
size: 60,
x: null,
y: null,
//draggable: true,
scholarUrl: "@subItem.Link"
});
links_@(item.Key).push(
{
source: "@subItem.RealName",
target: "@subItem.GroupName",
weight: 6,
name: "@subItem.RealName"
}); </text>
}
<text>
//// 基于准备好的dom,初始化echarts实例
var myChart_@(item.Key) = echarts.init(document.getElementById('relationChart_@item.Key'));
option_@(item.Key) = {
title: {
text: '研究“@(item.FirstOrDefault().GroupName)”的学者',
subtext: '',
//x: 'middle',
//y: 'top',
//textStyle: {
// align: "center",
//}
//top: "middle",
//bottom: "150",
left: "center"
},
tooltip: {
trigger: 'item',
formatter: '{b}'
},
toolbox: {
show: true,
feature: {
//restore: { show: true },
magicType: { show: true, type: ['force', 'chord'] },
//saveAsImage: { show: true }
}
},
@*legend: {
x: 'left',
data: legendData_@(item.Key)//['作者', '家人', '朋友']
},//分类*@
//edgeLength: [500, 100],
series: [
{
type: 'graph',
//name: "相关学者",
cursor: "pointer",
draggable: false,
layout: 'force',
//symbol: 'pin',
ribbonType: false,
//categories: seriesCategories,
cursor:'pointer',
itemStyle: {
normal: {
color: "#2ec7c9",//节点颜色
label: {
show: true,
textStyle: {
color: '#333'
},
position: 'bottom',//标签位置
distance: 5//标签距离图形的距离
},
nodeStyle: {
brushType: 'both',
borderColor: 'rgba(255,215,0,0.4)',
borderWidth: 1
},
linkStyle: {
type: 'line'
}
},
emphasis: {
label: {
show: false
// textStyle: null // 默认使用全局文本样式,详见TEXTSTYLE
},
nodeStyle: {
//r: 30
},
linkStyle: {}
}
},
//useWorker: false,
minRadius: 15,
maxRadius: 25,
//gravity: 0.1,
//scaling: 0.1,
roam: 'scale',//设置成可缩放
nodes: nodes_@(item.Key),
links: links_@(item.Key), force: {
repulsion: 1000
}
}
]
}; // 使用刚指定的配置项和数据显示图表。
myChart_@(item.Key).setOption(option_@(item.Key));
//节点点击事件
myChart_@(item.Key).on('click', function (param) {
if (param.data.scholarUrl) {
window.open(param.data.scholarUrl);
}
});
</text>
}
}
}) </text>
}
}

在script标签里,使用razor视图模板语法,在C#代码里输出js代码,使用<text></text>标签即可。

后台获取Echarts所需相关数据的方法及相关model

#region 获取相关学者列表
/// <summary>
/// 获取相关学者列表
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public JsonpResult GetScholarRelation(ScholarDto p)
{
if (string.IsNullOrEmpty(p.BookId))
{
return this.Jsonp(new { Success = , Msg = "查询失败:" + ":前台传参异常" });
}
var list = new List<ScholarDto>();//学者集合列表
var groups = new List<ScholarDto>();//学者研究主题集合列表
try
{
list=scholarService.GetScholarRelation(p);
var group=list.GroupBy(c => c.GroupId);
foreach (var item in group)
{
groups.Add(new ScholarDto(){ GroupId=item.Key??,GroupName=item.FirstOrDefault().GroupName});
}
return this.Jsonp(new { Success = , Msg = "查询成功", List = list, Group = groups });
}
catch (Exception ex)
{
return this.Jsonp(new { Success = , Msg = "查询失败:" + ex.Message });
}
}
#endregion
 public partial class xk_scholar
{
public long Id { get; set; }
public string BookId { get; set; }
public string RealName { get; set; }
public Nullable<long> GroupId { get; set; }
public string Avatar { get; set; }
public string Link { get; set; }
public string Editor { get; set; }
public Nullable<int> OrderNum { get; set; }
public Nullable<System.DateTime> ADDTIME { get; set; }
public Nullable<System.DateTime> UpdateTime { get; set; }
public Nullable<int> IsDel { get; set; }
}
 public class ScholarDto : xk_scholar
{
/// <summary>
/// 研究主题名称
/// </summary>
public string GroupName { get; set; }
/// <summary>
/// 重新编码排序的研究主题编号,从1开始,用以使用插件echarts
/// </summary>
public int GroupCode { get; set; }
}

前台脚本,控制图表显示与隐藏

 $(function () {
var curGroupId=@(ViewBag.GroupId??0); if (curGroupId>0) {//通过左侧导航点击
$(".choose a[data-groupid='{0}']".format(curGroupId)).click(); }
else {//默认第一条显示
$(".choose a:eq(0)").click(); }
init_ready();//调整高度
})

总结

切换分类,展示不同的ECharts,可以采用实例化多个ECharts,脚本控制图表的显示与隐藏。在script标签里,使用razor视图模板语法,在C#代码里输出js代码,使用<text></text>标签即可。

Echarts图表插件(4.x版本)使用(二、带分类筛选的多个图表/实例化多个ECharts,以关系图/force为例)的更多相关文章

  1. ECharts图表插件(4.x版本)使用(一、关系图force节点显示为自定义图像/图片,带分类选择)

    导读 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safar ...

  2. 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转

    站点地图不外乎就是罗列一个网站的层次结构,提炼地讲就是一个关系结构图.那么我们如何巧用ECharts图表组件内的简单关系结构图来实现一个站点的地图结构呢?另外如何点击某个节点的时候实现页面跳转呢? 针 ...

  3. 图标插件--jqplot实现柱状图及饼图,表盘图演示样例

    柱状图 在jqPlot图表插件使用说明(一)中,我们已经能够通过jqPlot绘制出比較简单的线形图.通过查看源码.我们也能够看出,线形图是jqPlot默认的图表类型: /** * Class: Ser ...

  4. 数据图表插件echarts(二)

    前言 上一篇文章简单介绍了一下百度公司前端部门写的一个js插件echarts,这是一款很强大的图表插件,里面的地图控件也是很强大的,支持离线的使用,并且数据也是离线的,使用很方便.下面我就简单介绍一下 ...

  5. vue3.x版本安装element-ui、axios及echarts图表插件

    项目中安装使用element-UI 命令行: vue add element 安装成功后,项目会自动将element-UI引入项目中,刷新项目即可 项目中安装使用axios数据请求 vue add a ...

  6. 如何在网页中用echarts图表插件做出静态呈现效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. 转-——推荐几个web中常用的一些js图表插件 - zccst

    http://www.tuicool.com/articles/bqq2Qn 作者:zccst 我自己用过fusioncharts和highchart. jQuery插件有: TufteGraph f ...

  8. 推荐几个web中常用js图表插件

    作者:zccst 我自己用过fusioncharts和highchart. jQuery插件有: TufteGraph flot js charts jqchart elycharts jquery ...

  9. python 全栈开发,Day58(bootstrap组件,bootstrap JavaScript 插件,后台模板,图表插件,jQuery插件库,Animate.css,swiper,运行vue项目)

    一.bootstrap组件 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 组件和插件的区别? 插件:一个功能,比如js文件 组件:html css js 组件包含插件 面 ...

随机推荐

  1. There is no getter for property named 'username' in 'class Model1.User'-----报错解决

    There is no getter for property named 'username' in 'class Model1.User' -----Model Model1.User'中没有名为 ...

  2. 使用 cxf的程序 在win10 测试部署时报空指针异常

    2018-11-08 15:50:55.072 DEBUG 21524 --- [nio-8080-exec-1] o.s.b.w.s.f.OrderedRequestContextFilter  : ...

  3. yarn or npm 版本固化如何选择

    前言 作为前端开发者,npm这个包管理工具的重要性显而易见.优点不再表述,但一些缺点是为使用者诟病比较多的:速度慢.版本控制.下面主要讨论下npm的版本固化问题,即lock文件. npm语义化版本管理 ...

  4. SQL系统优化

    1 系统优化介绍 在我们的项目中,由于客户的使用时间较长或客户的数据量大,造成系统运行速度慢,系统性能下降就容易造成数据库阻塞.这是个非常痛苦的事情,用户的查询.新增.修改等需要花很多时间,甚至造成系 ...

  5. curl推送示例:熊掌号,百度站长的链接推送(系统环境变量配置)

    curl推送示例:熊掌号,百度站长的链接推送(需要用户系统环境变量配置)这篇文章主要讲解curl推送,熊掌号,百度站长的链接推送,我们很多seo朋友都搞不定curl的推送链接,而且还要配置系统的环境变 ...

  6. ZigBee按键中断

    何为按键中断? 在了解按键中断之前,我们先来了解一下什么是中断?中断就是程序执行当前代码,当前任务的时候: 突然有自身函数或外部的影响,而使程序执行到别的任务再回来. 举个栗子: 当你在做饭的时候,电 ...

  7. Lake Counting-C++

    Description Due to recent rains, water has pooled in various places in Farmer John's field, which is ...

  8. Vue杂谈

    <div id="app"> <input type="text" ref="input1"/> <butto ...

  9. SpringBoot学习笔记2

    九:创建父工程 注意:打包方式选择为pom 将创建SpringBoot常用的依赖和插件放在父工程的pom.xml,如下: <project xmlns="http://maven.ap ...

  10. [leetcode] 110. Balanced Binary Tree (easy)

    原题链接 水题 深度搜索每一节点的左右深度,左右深度差大于1就返回false. class Solution { public: bool isBalanced(TreeNode *root) { b ...