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 scale1 = [{
dataKey: 'time',
type: 'timeCat',
nice: false,
range: [ 0, 1 ]
}, {
dataKey: 'trend',
values: [ '上涨', '下跌' ],
}, {
dataKey: 'volumn',
alias: '成交量'
}, {
dataKey: 'start',
alias: '开盘价'
}, {
dataKey: 'end',
alias: '收盘价'
}, {
dataKey: 'max',
alias: '最高价'
}, {
dataKey: 'min',
alias: '最低价'
}, {
dataKey: 'range',
alias: '股票价格'
}];
const scale2 = [{
dataKey: 'volumn',
tickCount: 2
}];
const tooltipOpts = {
showTitle: false,
itemTpl: '
'
+ ''
+ '{name}{value}',
};
const candleOpts = {
color: ['trend', val => {
if (val === '上涨') {
return '#f04864';
}
if (val === '下跌') {
return '#2fc25b';
}
}],
tooltip: ['time*start*end*max*min', (time, start, end, max, min) => {
return {
name: time,
value: '
开盘价:' + start + '
'
+ '收盘价:' + end + '
'
+ '最高价:' + max + '
'
+ '最低价:' + min + ''
};
}],
};
const axis1Opts = {
label: {
formatter: val => {
return parseInt(String(val / 1000), 10) + 'k';
}
}
};
const barOpts = {
color: ['trend', val => {
if (val === '上涨') {
return '#f04864';
}
if (val === '下跌') {
return '#2fc25b';
}
}],
tooltip: ['time*volumn', (time, volumn) => {
return {
name: time,
value: '
成交量:' + volumn + '
'
};
}]
};
@Component({
selector: '#mount',
template: `
`
})
class AppComponent {
forceFit: boolean = true;
height: number = 600;
data = [];
dv = [];
scale1 = scale1;
scale2 = scale2;
start = '2015-07-07';
end = '2015-07-28';
tooltipOpts = tooltipOpts;
candleOpts = candleOpts;
axis1Opts = axis1Opts;
barOpts = barOpts;
scales = {
time: {
type: 'timeCat',
nice: false,
}
};
constructor() {
$.getJSON('/assets/data/candle-sticks.json', (sourceData) => {
this.data = sourceData;
this.dv = this.getData();
});
}
getData = () => {
const { start, end, data } = this;
const ds = new DataSet({
state: {
start,
end,
}
});
const dv = ds.createView();
dv.source(data)
.transform({
type: 'filter',
callback: obj => {
const date = obj.time;
return date <= end && date >= start;
}
})
.transform({
type: 'map',
callback: obj => {
obj.trend = (obj.start <= obj.end) ? '上涨' : '下跌';
obj.range = [ obj.start, obj.end, obj.max, obj.min ];
return obj;
}
});
return dv;
}
slideChange = (opts: any) => {
this.start = opts.startText;
this.end = opts.endText;
this.dv = this.getData();
}
}
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ViserModule
],
providers: [],
bootstrap: [
AppComponent
]
})
export default class AppModule { }