import 'zone.js'; import 'reflect-metadata'; import { Component, enableProdMode, NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { ViserModule } from 'viser-ng'; import * as $ from 'jquery'; const DataSet = require('@antv/data-set'); const { DataView } = DataSet; const scale = [{ dataKey: 'time', type: 'time', tickCount: 10, mask: 'M/DD H:mm' }]; const facetOpts = { views: (view, facet) => { const { colValue, data } = facet; let color; let alias; if (colValue === 'rain') { color = '#1890ff'; alias = '降雨量(mm)'; } else if (colValue === 'flow') { color = '#2FC25B'; alias = '流量(m^3/s)'; } return { data, scale: [{ dataKey: colValue, alias, }], series: [{ quickType: 'line', position: `time*${colValue}`, color, }] }; } }; @Component({ selector: '#mount', template: `
` }) class AppComponent { forceFit: boolean = true; height: number = 600; data = []; scale = scale; originDv = []; chartDv = []; start = '2009/7/20 0:00'; end = '2009/7/25 0:00'; facetOpts = facetOpts; scales = { time: { type: 'time', tickCount: 10, mask: 'M/DD H:mm' } }; constructor() { $.getJSON('/assets/data/rain-flow.json', (sourceData) => { this.data = sourceData; const data = this.getData(); this.originDv = data.originDv; this.chartDv = data.chartDv; console.log(this); }); } getData = () => { const { start, end, data } = this; const startTime = new Date(start).getTime(); const endTime = new Date(end).getTime(); const ds = new DataSet({ state: { start, end, } }); const originDv = ds.createView(); originDv.source(data) .transform({ type: 'fold', fields: [ 'rain', 'flow' ], key: 'type', value: 'value', retains: [ 'rain', 'flow', 'time' ] }); const chartDv = ds.createView(); chartDv.source(originDv) .transform({ type: 'fold', fields: [ 'rain', 'flow' ], key: 'type', value: 'value', retains: [ 'rain', 'flow', 'time' ] }) .transform({ type: 'filter', callback(obj) { const time = new Date(obj.time).getTime(); // !注意:时间格式,建议转换为时间戳进行比较 return time >= startTime && time <= endTime; } }); return { originDv, chartDv }; } slideChange = (opts: any) => { this.start = opts.startValue; this.end = opts.endValue; const data = this.getData(); this.originDv = data.originDv; this.chartDv = data.chartDv; } } @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, ViserModule ], providers: [], bootstrap: [ AppComponent ] }) export default class AppModule { }