Echarts是一个开源的图表组件,图表比较丰富,工作中需要用到它来搭建一个数据展示系统。但是系统原有的框架是基于angular的,而echarts是基于原生js的,如果直接使用的话就丢失了angular双向绑定的优势,而且后续代码不好维护,所以需要将echarts封装成一个通用的angular组件。

echarts原生实现如下:

<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="height:400px"></div>
<!-- ECharts单文件引入 -->
<script src="http://echarts.baidu.com/build/dist/echarts-all.js"></script>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts图表
var myChart = echarts.init(document.getElementById('main')); var option = {
tooltip: {
show: true
},
legend: {
data:['销量']
},
xAxis : [
{
type : 'category',
data : ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
"name":"销量",
"type":"bar",
"data":[5, 20, 40, 10, 10, 20]
}
]
}; // 为echarts对象加载数据
myChart.setOption(option);
</script>

echarts的使用比较简单,只要提供一个DOM容器,通过js提供的echarts对象进行初始化就可以,而初始化参数option是一个js对象,可以说echarts是基于配置的。

那么依照这个思路,通过angular封装出来的指令,只需要提供一个数据配置接口即可实现图表的展示,而且可以实现数据与视图的双向banding,使用只需要通过修改数据来获得图表的刷新。

所以自定义directive如下:

angular.module('app', []).directive('eChart', [function () {

        function link($scope, element, attrs) {

            // 基于准备好的dom,初始化echarts图表
var myChart = echarts.init(element[0]); //监听options变化
if (attrs.uiOptions) {
attrs.$observe('uiOptions', function () {
var options = $scope.$eval(attrs.uiOptions);
if (angular.isObject(options)) {
myChart.setOption(options);
}
}, true);
} } return {
restrict: 'A',
link: link
};
}]).controller('pieController', ['$scope', function ($scope) { function initData() {
var arr = [];
for (var i = 0; i < 6; i++) {
arr.push(parseInt(Math.random() * 100));
}
return arr;
} var data = initData();
console.log(data);
$scope.data = data; $scope.changData = function () {
var data = initData();
console.log(data);
$scope.data = data;
} }]);

这里提供了attribute式的directive,只要在dom标签中声明了e-chart属性,angular将会使用echarts初始化这个dom结构,而初始化的参数就是directive声明中的另外一个属性ui-options。所以,在controller中,只需要将配置参数绑定在$scope上,然后在dom结构中将这个参数赋值给ui-options即可实现初始化,后续需要更新图表则直接修改$scope上的参数即可。

html结构如下:

<div class="col-xs-12" ng-controller="pieController">
<button ng-click="changData()">click me</button>
<div e-chart ui-options="{tooltip: {show: true},
legend: {
data: ['销量']
},
xAxis: [
{
type: 'category',
data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
'name': '销量',
'type': 'bar',
'data': {{data}}
}
]}" style="height: 400px;width: 100%;"></div>
</div>

使用angular封装echarts的更多相关文章

  1. angular 封装公共方法

    angular封装公共方法到service中间件,节省开发时间 layer.service.ts openAlert(callback) {// 传递回调函数 const dialogRef = th ...

  2. react-native中使用Echarts,自己使用WebView封装Echarts经验

    1.工作中遇到的问题 我们在使用react-native肯定遇到过各种奇葩的问题,比如引入Echarts时候莫名报错,但是Echarts官网明显告诉我们可以懒加载的,这是因为基本上js大部分原生的组件 ...

  3. vue学习【一】vue引用封装echarts并展示多个echarts图表

    大家好,我是一叶,经过一段时间对vue的学习,我打算把vue做一个系列,把踩过的坑和大家分享一下. 现在开始第一章:vue引用并封装echarts 在文章开始前,我先舔波echarts(真香).阿里的 ...

  4. 在vue项目中封装echarts的正确姿势

    为什么需要封装echarts 每个开发者在制作图表时都需要从头到尾书写一遍完整的option配置,十分冗余 在同一个项目中,各类图表设计十分相似,甚至是相同,没必要一直做重复工作 可能有一些开发者忘记 ...

  5. angular把echarts封装为指令(配合requirejs)

    1.在require中配置echartsjs文件 2.在directives下定义指令(定义为全局的指令,任何页面调用都可以) define(['app','echarts'],function(ap ...

  6. angular结合echarts创建图表

    原理: 利用angularjs中的指令(directive)将echarts封装. 步骤: 1.封装函数: app.directive('line', function() { return { re ...

  7. angular使用echarts折线图

    echarts是开源的画图工具,在angular框架中引入echarts不能直接使用.需要新建一个directive //echarts基本参数 app.factory('$echartsConfig ...

  8. 封装Echarts

    项目中需要对数据进行图形展示,例如展示柱状图.饼状图等.这类的前端展示脚本很多,常见的是HighCharts和Echarts.HighCharts是基于svg技术的,而echarts基于Echarts ...

  9. angularf封装echarts

    前言:angular中快速使用echarts 在html使用ehart很简单,你只需要引入文件和按照官方例子按照对应参数配置和数据填充就Ok了,那么在angular中怎么使用eharts(可以使用ec ...

随机推荐

  1. TCP/IP详解学习笔记(11)-- TFTP:简单文本传输协议,BOOTP:引导程序协议

    1.TFTP:      TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,基于UD ...

  2. javascript代码复用模式

    代码复用有一个著名的原则,是GoF提出的:优先使用对象组合,而不是类继承.在javascript中,并没有类的概念,所以代码的复用,也并不局限于类式继承.javascript中创建对象的方法很多,有构 ...

  3. 【MySQL】删除大表的讨论【转】

    转自http://tech.ddvip.com/2013-07/1373269453198566.html 微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL ...

  4. 在centos上安装mysql5.7的三种方法

    带OS信息的是已编译的二进制文件,不带OS信息的是源码包 mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz 二进制包 mysql-5.5.51.tar.gz 源码包 ...

  5. hbase日常操作及维护

    一,基本命令: 建表:create 'testtable','coulmn1','coulmn2' 也可以建表时加coulmn的属性如:create 'testtable',{NAME => ' ...

  6. Something wrong with EnCase index search in Unallocated area

    hi, My EnCase version is v7 and I found a terrible issue about index search in Unallocated area. Wit ...

  7. centOS 6.4下安装中文输入法

    1.用root登录 ,或su root 2.yum install "@Chinese Support" 3.exit 4.回到桌面,system->preferences- ...

  8. Unieap3.5-Grid翻页不提示修改

    <toolbar export="{defaultType:'server'}" paging="{onPagingModified:ssSettleCheck.o ...

  9. 免费在线CAD文件转换

    AnyCAD Exchange Cloud 提供在线的CAD文件转换服务,包括二维图纸和三维模型的数据转换. 支持的格式有: DWG/DGN/DXF 到 PDF, SVG, DAE等的转换 STEP/ ...

  10. 在mac系统上安装Eclipse,编写java程序

    第一步:安装java jre(java 运行环境). 如图所示: 登陆Oralce官网,点击Download选项,找到如图所示界面: 选择Java Runtime Environment(JRE),打 ...