vue-chartjs
来源:互联网 发布:知乎 汉景帝杀吴太子 编辑:程序博客网 时间:2024/05/26 17:43
对于第三方控件的使用,可参考的文档:官网、或查询导入的第三方代码
vue-chartjs图表数据结构为:数据结构官网: http://www.chartjs.org/docs/latest/charts/line.html#cubicInterpolationMode
(
this.renderChart(data, options)
其中官网中的
Configuration options 都是options中的属性。
Chart.defaults.global 就是和options同级别的。
例子:
options: { tooltips: { intersect: false // default: true. if true, the tooltip mode applies only when the mouse position intersects with an element. If false, the mode will be applied at all times. }, animation: { duration: 1 // 动画时长 }, responsive: true, // 长宽,100%.如果要单设长和宽的话,要将responsive 设为false maintainAspectRatio: false // 保持长宽比 }
)
数据结构例子:
chartData: { labels: [ '', '', '', '', '', '', '', '', '', '' , '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ], datasets: [ { label: '租户:' + (self.tanent==null? "all" :self.tanent) + ' group:' + (self.groupName==null? "all" :self.groupName) + " event:" + (self.event==null? "all" :self.event),// backgroundColor: "rgba(255,255,255,0",// borderColor: '#FC2525',// pointBackgroundColor: 'FC2525',// borderWidth: 1,// pointBorderColor: 'FC2525', backgroundColor: null, data: [ null, null, null, null, null, null, null, null, null, null , null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null ] } ] }
注释掉的部分就是它内部的属性。 backgroundColor是所有的背景色,border是线条颜色,point是点颜色
vue-chartjs
这是vue的图表控件:http://vue-chartjs.org/#/home?id=installation
npm install vue-chartjs -snpm install chart.js -s
代码示例:
<script> import {Line, mixins} from 'vue-chartjs' const { reactiveProp } = mixins export default Line.extend({ mixins: [reactiveProp], props: ['chartData'], mounted () { this.renderChart(this.chartData, {responsive: true, maintainAspectRatio: false}) } })</script>
这段代码的作用就是自己封装了一个折线图控件,这个可以是js文件,也可以是没有template的vue文件。
为什么用mixins。这个是用来判断图表的chartData;来自哪里?是这几的data:function(){return{}} 还是props:【】中,如果是reactiveProp则来自props。如果是reactiveData则来自自己的data方法中的return中。
那为什么renderChart方法中第一个参数一定要chartData呢?因为,reactiveProp.js 和reactiveData。js中只有对chartData的watch。
vue-chartjs插件
’
reactiveProp.js的代码
module.exports = { props: { chartData: { required: true } }, watch: { 'chartData': { handler (newData, oldData) { if (oldData) { let chart = this._chart // Get new and old DataSet Labels let newDatasetLabels = newData.datasets.map((dataset) => { return dataset.label }) let oldDatasetLabels = oldData.datasets.map((dataset) => { return dataset.label }) // Stringify 'em for easier compare const oldLabels = JSON.stringify(oldDatasetLabels) const newLabels = JSON.stringify(newDatasetLabels) // Check if Labels are equal and if dataset length is equal if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) { newData.datasets.forEach((dataset, i) => { // Get new and old dataset keys const oldDatasetKeys = Object.keys(oldData.datasets[i]) const newDatasetKeys = Object.keys(dataset) // Get keys that aren't present in the new data const deletionKeys = oldDatasetKeys.filter((key) => { return key !== '_meta' && newDatasetKeys.indexOf(key) === -1 }) // Remove outdated key-value pairs deletionKeys.forEach((deletionKey) => { delete chart.data.datasets[i][deletionKey] }) // Update attributes individually to avoid re-rendering the entire chart for (const attribute in dataset) { if (dataset.hasOwnProperty(attribute)) { chart.data.datasets[i][attribute] = dataset[attribute] } } }) chart.data.labels = newData.labels chart.update() } else { chart.destroy() this.renderChart(this.chartData, this.options) } } else { this.renderChart(this.chartData, this.options) } } } }}
reactiveData.js
module.exports = { data () { return { chartData: null } }, watch: { 'chartData': { handler (newData, oldData) { if (oldData) { let chart = this._chart // Get new and old DataSet Labels let newDatasetLabels = newData.datasets.map((dataset) => { return dataset.label }) let oldDatasetLabels = oldData.datasets.map((dataset) => { return dataset.label }) // Stringify 'em for easier compare const oldLabels = JSON.stringify(oldDatasetLabels) const newLabels = JSON.stringify(newDatasetLabels) // Check if Labels are equal and if dataset length is equal if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) { newData.datasets.forEach((dataset, i) => { // Get new and old dataset keys const oldDatasetKeys = Object.keys(oldData.datasets[i]) const newDatasetKeys = Object.keys(dataset) // Get keys that aren't present in the new data const deletionKeys = oldDatasetKeys.filter((key) => { return key !== '_meta' && newDatasetKeys.indexOf(key) === -1 }) // Remove outdated key-value pairs deletionKeys.forEach((deletionKey) => { delete chart.data.datasets[i][deletionKey] }) // Update attributes individually to avoid re-rendering the entire chart for (const attribute in dataset) { if (dataset.hasOwnProperty(attribute)) { chart.data.datasets[i][attribute] = dataset[attribute] } } }) chart.data.labels = newData.labels chart.update() } else { chart.destroy() this.renderChart(this.chartData, this.options) } } else { this.renderChart(this.chartData, this.options) } } } }}
Configuration options
阅读全文
1 0
- vue-chartjs
- chartjs
- ChartJs自定义tooltipTemplate
- 利用chartjs生成图表
- canvas基础上:chartjs
- chartjs图标插件
- chartjs的canvas清空重绘
- 用 ChartJS 创建动态仪表盘
- 关于 chartjs插件的用法
- chartJS+ajax+ssm简单整合
- 关于数据可视化Chartjs,Highcharts用法
- chartJs柱状图下滑条怎么写?
- 一行显示几个chartjs的图
- Vue
- vue
- vue
- Vue
- Vue
- java反射中参数问题
- easyUI学习过程(二) ----在myeclipse上创建web项目并运行html文件
- xwPython的安装与使用
- 取numpy数组的某一行某一列
- WebDriver API学习笔记
- vue-chartjs
- java SpringMVC + Mybatis 一套前台到后台完整获取数据的步骤
- COS腾讯云对象存储的集成
- SpringBoot入门--Demo篇
- 安装Tomcat
- HDU
- VS2015中CString转string方法
- Spark 之 UDF 函数
- QQ、微信、新浪 利用refresh_token重新登录