一、代码

  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. 《mysql必知必会》学习_第16章_20180807_欢

    第16章:创建高级联结. P106 select concat(RTrim(vend_name),'(',RTrim(vend_country),')') as vend_title from ven ...

  2. array_flip()函数

    array_flip() 函数用于反转/交换数组中所有的键名以及它们关联的键值. array_flip() 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都 ...

  3. 「NOI2018」屠龙勇士(EXCRT)

    「NOI2018」屠龙勇士(EXCRT) 终于把传说中 \(NOI2018D2\) 的签到题写掉了... 开始我还没读懂题目...而且这题细节巨麻烦...(可能对我而言) 首先我们要转换一下,每次的 ...

  4. javascript知识整理之this

    js中的this是一个头疼的问题,尤其对于笔者这种初级的菜鸟来讲,下面梳理下this的知识,可以当做是初级进阶也好入门也罢,总归输出的才是自己掌握的: Js中this不是由词法作用域决定的 而是调用时 ...

  5. Web开发经验谈之F12开发者工具/Web调试[利刃篇]

    引语:如今的整个Web开发行业甚至说整个软件开发行业,已经相当成熟,基本上已经很少找不到没有前人做过的东西了,或者换句话说,你想要实现的功能,你总能在某个地方搜索到答案,关键是你有没有这个时间精力去搜 ...

  6. 开源性能测试工具Locust使用篇(三)

    脚本增强 面对较复杂的测试场景,我们可能还是会感觉无从下手:例如,很多时候脚本需要做关联或参数化处理,Locust中就不知道怎么实现了.可能也是这方面的原因,感觉难以将Locust应用到实际的性能测试 ...

  7. WCF透明代理类,动态调用,支持async/await

    我们希望WCF客户端调用采用透明代理方式,不用添加服务引用,也不用Invoke的方式,通过ChannelFactory<>动态产生通道,实现服务接口进行调用,并且支持async/await ...

  8. javascript 实现数据结构 - 队列

    队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项.队列在尾部添加新元素,并从顶部移除元素.最新添加的元素必须排在队列的末尾. 1.构造函数构建队 ...

  9. 个人总结的一个中高级Java开发工程师或架构师需要掌握哪几点!

    今天,我来唠叨几句~~ 知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰.今天为大家分享Java程序员学习的6个小技巧. 1.一定要看书 现在学习Java变得比以前容 ...

  10. Kafka实战-Kafka到Storm

    1.概述 在<Kafka实战-Flume到Kafka>一文中给大家分享了Kafka的数据源生产,今天为大家介绍如何去实时消费Kafka中的数据.这里使用实时计算的模型——Storm.下面是 ...