- npm install klinecharts@10.0.0-alpha5
- 使用组件
<template>
<kline :parent-kline-data="klineData" :parent-kline-data-update="klineDataUpdate"
:kline-status="klineStatus" v-if="klineStatus" ref="kline"></kline>
</template>
<script>
import kline from "../../components/kline/kline.vue"
components: {
'kline': kline,
},
</script>
<template>
<div id="chart" style="height: calc(100vh - 700rpx)"></div>
</template>
<script>
import {
deepClone
} from '../../utils/index.js'
import {
init, dispose
} from 'klinecharts'
import {
config
} from './klineConfig.js'
export default {
data() {
return {
kline: null,
klineData: [],
macd: null
}
},
props: {
parentKlineData: {
type: Array,
default: [],
},
parentKlineDataUpdate: {
type: Object,
default: [],
},
klineStatus: {
type: Boolean,
default: false,
}
},
watch: {
parentKlineDataUpdate: {
deep: true,
handler(newVal, oldVal) {
this.klineUpdate();
}
},
klineStatus: {
immediate: true,
deep: true,
handler(newVal, oldVal) {
setTimeout(() => {
console.log('newVal:',newVal);
if (newVal === true) {
dispose('chart');
console.log('init');
this.kline = init('chart')
this.initKline()
}
}, 500)
}
}
},
methods: {
initKline() {
let numLength = this.parentKlineData[0].high.toString().split('.')[1].length
this.kline.createIndicator('MA', false, {
id: 'candle_pane',
dragEnabled: false,
axis: {
gap: {
top: 60,
bottom: 0
}
}
})
this.macd = this.kline.createIndicator('MACD', false, {
dragEnabled: false,
axis: {
gap: {
top: 60,
bottom: 0
}
}
})
this.kline.setStyles(config);
this.kline.setMaxOffsetLeftDistance(20);
this.kline.setOffsetRightDistance(20);
this.kline.setMaxOffsetRightDistance(20);
this.kline.setPrecision({ price: numLength ? numLength : 2 , volume: numLength ? numLength : 2});
this.kline.applyNewData(this.parentKlineData)
this.kline.getSize('candle_pane', 'main');
this.kline.setDecimalFold({ threshold: 1000 });
},
klineUpdate() {
let data = deepClone(this.parentKlineDataUpdate)
data.high = Math.max(data.high, data.close);
data.low = Math.min(data.low, data.close);
this.kline.updateData(data)
}
}
}
</script>
<style>
</style>