不爱贞子爱爽子
バキューン

 1、安装库

 

npm install typings echarts --global

npm install ngx-echarts --save

npm install @types/echarts --save

2、app.module引入

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
import {ButtonModule} from 'primeng/primeng';
import { HeaderComponent } from './components/header/header.component';  // header  components
import {NgxEchartsModule} from 'ngx-echarts';
@NgModule({
  declarations: [
    AppComponent,
    HomeComponent,
    HeaderComponent,
    // selfHttp
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    ButtonModule,
    NgxEchartsModule
  ],
  providers: [httpInterceptorProviders, apiList,{provide: LocationStrategy, useClass: HashLocationStrategy}],
  bootstrap: [AppComponent]
})
export class AppModule { }

3、具体文件使用

html代码

<div #myCharts echarts [options]="chartOption" class="demo-chart charstDiv" ></div>

ts代码

import { Component, OnInit, Input } from '@angular/core';
import { MessageService } from 'primeng/api';
import * as ec from 'echarts';  // 没有安装ypes/echarts就会报错
@Component({
  selector: 'app-table',
  templateUrl: './table.component.html',
  styleUrls: ['./table.component.css'],
  providers: [MessageService]
})

export class TableComponent implements OnInit {

 
  chartOption: any;
  constructor(private messageService: MessageService) {

  }

  ngOnInit() {
    this.selectedColumns = this.tablelist.header;
    this.items = [
      {
        label: '查看', icon: 'pi pi-eye', command: (event) => this.showDialog()
      },
      { label: '删除', icon: 'pi pi-trash', command: (event) => this.del() }
    ];

  }
  onRowSelect(event) {
    this.data = {
      labels: [],
      datasets: []
    };
    this.displaySidebar = true;
    // 组装图表
    var data1 = [];
    var data2 = [];
    var data3 = [];
    this.selectedList.forEach((element, index) => {
      data1.push((element.month + '月'));
      // 销量
      data2.push(element.sale);
      // 店铺数
      data3.push(element.comNum);
    });
    this.chartOption = {
      // title: {
      //   text: '堆叠区域图'
      // },
      backgroundColor: '#2c343c',
      tooltip: {
        trigger: 'axis'
      },
      legend: {
        data: ['零售额', '店铺总数',],
        textStyle: {//图例文字的样式
          color: 'white',
          fontSize: 16
        }
      },
      toolbox: {
        orient: 'vertical',
        top: 'middle',
        feature: {
          // dataView: {//数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新。
          //   show: true,//是否显示组件。
          //   readOnly: false
          // },
          magicType: {//动态类型切换 示例:feature: { magicType: {type: ['line', 'bar', 'stack', 'tiled']}}
            show: true,
            type: ['line', 'bar']
          },
          restore: {//配置项还原。
            show: true
          },
          saveAsImage: {}
        }
      },
      dataZoom: {//dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。
        type: 'slider',//滑动条型数据区域缩放组件
        start: 0,//起始位置0
        end: 100//结束位置100
      },
      grid: {
        left: '3%',
        right: '4%',
        bottom: '40px',
        containLabel: true
      },
      xAxis: [
        {
          type: 'category',
          boundaryGap: false,
          axisLabel: {
            interval: 0,
            textStyle: {
              color: '#c3dbff',  //更改坐标轴文字颜色
              fontSize: 14      //更改坐标轴文字大小
            }
          },
          data: data1,
          axisLine: {
            lineStyle: {
              color: 'white', //更改坐标轴颜色
            }
          }
        }
      ],
      yAxis: [
        {
          type: 'value',
          axisLabel: {
            interval: 0,
            textStyle: {
              color: '#c3dbff',  //更改坐标轴文字颜色
              fontSize: 14      //更改坐标轴文字大小
            }
          },
          axisLine: {
            lineStyle: {
              color: 'white', //更改坐标轴颜色
            }
          }
        }
      ],
      series: [
        {
          name: '零售额',
          type: 'line',
          stack: '总量',
          areaStyle: {normal: {
            color:new ec.graphic.LinearGradient(0, 0, 0, 1, [  //随机颜色
              { offset: 0, color: 'red' },
              { offset: 0.5, color: 'pink' },
              { offset: 1, color: '#ddd' }
            ])
          }},
          itemStyle: {
            normal: {
              color: function () {
                return '#' + Math.floor(Math.random() * 0xffffff).toString(16); // 随机颜色
              }
            }
          },
          data: data2
        },
        {
          name: '店铺总数',
          type: 'line',
          stack: '总量',
          areaStyle: {normal: {
            color:new ec.graphic.LinearGradient(0, 0, 0, 1, [
              { offset: 0, color: '#9cd4d8' },
              { offset: 0.5, color: '#aec9fe' },
              { offset: 1, color: 'pink' }
            ])
          }},
          itemStyle: {
            normal: {
              color: function () {
                return '#' + Math.floor(Math.random() * 0xffffff).toString(16);
              }
            }
          },
          data: data3
        },
      ]
    }
  }

}

注意:渲染数据的时机要选好,组装数据放在最后组装,如果把chartOption 定义在前面,再给series赋值图表是不会更新的,当然ec的方法里面可能会有,但是确挺麻烦的,优先考虑简单的。

 

 

 

 

 

 有点colorful了,自己调整下。


 

posted on 2019-11-01 16:45  不爱贞子爱爽子  阅读(632)  评论(0编辑  收藏  举报

! !