一、代码

  html代码

 <!-- html -->
<nz-card style="background-color: #0e0b2a;border: 0px;color: #8cc5fe;min-height: 180px;width: 100%;height: 100%;">
<div style="padding: 4px 12px;height: 200px;">
<label>
{{title}}
</label>
<div echarts id="powerline" [options]="option" (chartInit)="onChartInit($event)" [loading]="isLoading" [loadingOpts]="loadingOpts" [autoResize]="'true'" style="position: relative;left: 4px;-webkit-tap-highlight-color: transparent;user-select: none;overflow-y: hidden;width: 100%;height: 100%;" class="demo-chart"></div>
</div>
</nz-card>

  ts代码

 import { Component, OnInit, Input, SimpleChanges, HostListener, ElementRef } from '@angular/core';
import * as echarts from 'echarts';
import { fromEvent } from 'rxjs'; @Component({
selector: 'app-powerline',
templateUrl: './powerline.component.html',
styleUrls: ['./powerline.component.css']
})
export class PowerlineComponent implements OnInit {
@Input() title:string;
@Input() value:any; public option:any;
public echartsInstance: any; //时间轴
private timeline_data:any;
//功率曲线轴
private power_data:any; //自定义监听事件
private pageResize:any;
constructor(private el:ElementRef) {
//监听窗口resize事件,调用重绘图表方法,重新绘图
this.pageResize = fromEvent(window, 'resize').subscribe(() => {
this.resizeChart();
});
} //ngx-echarts初始化,获得图表实例
onChartInit(event) {
this.echartsInstance = event;
 } //重新绘制图表
resizeChart() {
if (this.echartsInstance) {
this.echartsInstance.resize();
}
} ngOnInit() { } ngOnChanges(changes: SimpleChanges): void {
// this.power_data = this.processPowerLineData();
this.option = {
title: {
text: '',
},
tooltip: {
trigger: 'axis'
},
legend: {
data:['功率'],
bottom :10,
},
grid:{
x:35,
y:25,
x2:30,
y2:50,
borderWidth:1
},
toolbox: {
show: false,
feature: {
magicType: {show: false, type: ['stack', 'tiled']},
saveAsImage: {show: false}
}
},
xAxis: {
name:'时间',
type: 'category',
nameGap :6,
nameTextStyle :{
color :'#364c64',
},
boundaryGap: false,
axisLine :{
show:true,
lineStyle :{
color:'#083b73',
width :0,
//shadowOffsetY :10,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#364c64' , },
data: this.processTimeLineData(),
},
yAxis: [{
type: 'value',
name:'功率(KW)',
max:1000,
nameTextStyle :{
color :'#364c64',
},
axisLine :{
show:true,
lineStyle :{
color:'#19193f',
width :2,
//shadowOffsetY :10,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#364c64' ,
margin:35,
textStyle: {
align:'left',
// baseline:'left',
// left:-40,
} }, },{
type: 'value',
name:'',
max:2500,
axisLine :{
show:true,
lineStyle :{
color:'#19193f',
width :2,
},
},
axisTick :{
show:false,
},
splitLine :{
show:false,
},
axisLabel:{
color :'#22a0f3' , }, }],
series: [{
name: '功率',
type: 'line',
symbol: 'none',
itemStyle :{
show: false,
color :'#22a0f3',
borderWidth :1,
},
lineStyle :{
color:'#22a0f3',
//type:'dashed',
},
smooth: true,
data:this.processPowerLineData(),
// data:this.power_data,
// data: [300, 590, 350, 790, 360, 550, 450,300, 590, 350, 790,300, 590, 350, 790, 360, 550, 450,300, 590, 350,300, 590,580]
}]
}; } //处理功率曲线时间轴数组
processTimeLineData(){
const _self=this;
_self.timeline_data = [];
if(_self.value){
if(0 != _self.value.length){
_self.value.map(
item =>{
let tem_a = item.time;
if(tem_a.length ==1){
tem_a = "0" + item.time + ":00";
}else if(tem_a.length == 2){
tem_a = item.time + ":00";
}else{
tem_a = item.time + ":00";
}
// parseInt(item.tem_a)
_self.timeline_data.push(tem_a);
}
)
}else{
_self.timeline_data = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00',"24:00"];
}
}else{
_self.timeline_data = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00',"24:00"];
}
return _self.timeline_data;
} //处理功率曲线数据数组
processPowerLineData(){
const _self=this;
_self.power_data = [];
if(_self.value){
if(0 != _self.value.length){
_self.value.map(
item =>{
_self.power_data.push(parseInt(item.powerp)) ;
}
)
}else{
_self.power_data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
}
}else{
_self.power_data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
}
return _self.power_data;
} ngOnDestroy(): void {
//销毁功率因数曲线的订阅事件
if(this.pageResize){
this.pageResize.unsubscribe();
}
} }

二、截图

  改变窗口大小前:

  改变窗口大小后:

  

三、说明

  注意:ngx-echarts想要图表能够随着窗口大小自适应,有两个关键点:

    ① 容纳图表的容器支持自适应

    ② 监听窗口的resize事件,当监听到变化时候,重新绘制图表

ngx-echarts响应式图表的更多相关文章

  1. echarts 响应式布局

    <body> <!-- 为ECharts准备一个具备大小(宽高)的Dom --> <div id="main" style="width: ...

  2. 【译】用 Chart.js 做漂亮的响应式表单

    数据包围着我们.虽然搜索引擎和其他应用都对基于文本方式表示的数据偏爱有加,但人们发现可视化是更容易理解的一种方式.今年初,SitePoint 发表了 Aurelio 的文章< Chart.js简 ...

  3. 怎样把echarts图表做成响应式的

    如果想要把echarts图表给做成响应式的那么就应该用rem 单位,给图表的外围容器设置rem 单位,然后调用jquery 的resize方法,$(window).resize(function(){ ...

  4. Echarts多个图表响应式以及其他问题

    1.限制柱状图的宽度(自适应的柱子很大) barMaxWidth:30//设置柱状最大的宽度 2.设置y轴的label标签显示(单位 元 转 万) axisLabel: {      formatte ...

  5. 基于 Vue + Element 的响应式后台模板

    项目地址 https://github.com/caochangkui/vue-element-responsive-demo 主要功能 响应式侧边栏 面包屑导航(结合router.js) 路由动效 ...

  6. Metronic – 超赞!基于 Bootstrap 的响应式后台管理模板

    Metronic 是一套精美的响应式后台管理模板,基于强大的 Twitter Bootstrap 框架实现.Metronic 拥有简洁优雅的 Metro UI 风格界面,6 种颜色可选,76 个模板页 ...

  7. Android响应式界面开发要点

    现在很多项目需要到达同一个Apk既可以在Phone上跑也尅在tablet上跑,即界面要适应不同尺寸和类型的需要而自动调整.这个即为响应式设计.在web开发商响应式设计已经是个常谈的内容了,而对于and ...

  8. [译] Swift 的响应式编程

    原文  https://github.com/bboyfeiyu/iOS-tech-frontier/blob/master/issue-3/Swift的响应式编程.md 原文链接 : Reactiv ...

  9. echarts生成的图表大小怎么随屏幕的大小改变自适应

    最近在做图表,记录一下用到的知识点,当做自己的日记吧,会不断添加新内容 1,echarts生成的图表大小怎么随屏幕的大小改变自适应? this.chart.setOption(this.options ...

随机推荐

  1. 使用Phabricator进行代码审查

    Pharicator 是FB的代码审查工具,主要开发者为Evan Priestley,是一个开源软件,可在Apache许可证第2版下作为自由软件分发.详细信息可查看官方文档.这里从应用的角度,一步一步 ...

  2. ETL概念详解

    ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...

  3. 剑指offer编程题Java实现——面试题9斐波那契数列

    题目:写一个函数,输入n,求斐波那契数列的第n项. package Solution; /** * 剑指offer面试题9:斐波那契数列 * 题目:写一个函数,输入n,求斐波那契数列的第n项. * 0 ...

  4. 利用Burp Suite攻击Web应用

    i春秋作家:Passerby2 web应用测试综述: Web应用漏洞给企业信息系统造成了很大的风险.许多web应用程序漏洞是由于web应用程序缺乏对输入的过滤.简而言之Web应用程序利用来自用户的某种 ...

  5. AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码

    前言 大家好,给大家带来AndroidStudio制作"我"的界面,设置,修改密码,设置密保和找回密码的概述,希望你们喜欢 学习目标 掌握修改密码功能的开发,和实现用户密码的修改: ...

  6. shell if 条件判断

    condition='123' if [ -z condition]; then echo "condition 是空的" fi 字符串判断: = 两个字符串相等. != 两个字符 ...

  7. 1,rocketmq 的原理与安装教程

    参考文档 http://blog.csdn.net/a19881029/article/details/34446629 https://github.com/alibaba/RocketMQ htt ...

  8. MySQL 字符集utf8和utf-8的关系

    目录 什么是字符集(character set) 校对规则(collation) ASCII码 Unicode国际化支持 UTF-8 utf8 utf8与utf8mb4的关系 超集 字符集设置 什么是 ...

  9. Statement与PreparedStatement的区别

    Statement与PreparedStatement的区别   PreparedStatement预编译SQL语句,性能好. PreparedStatement无序拼接SQL语句,编程更简单. Pr ...

  10. 机器学习基石笔记:06 Theory of Generalization

    若H的断点为k,即k个数据点不能被H给shatter,那么k+1个数据点也不能被H给shatter,即k+1也是H的断点. 如果给定的样本数N是大于等于k的,易得mH(N)<2N,且随着N的增大 ...