Vue 中集成 Chart.js 并处理 DOM 渲染时机
作者:页面旅途时间:2026-10-23 10:20:43浏览:512
本文介绍在 Vue 项目中集成 Chart.js 的方法,重点解决非 Vue 插件依赖 DOM 存在的渲染时机问题。通过自定义指令 `v-loaded-callback` 确保 DOM 插入后初始化图表,并提供组件封装、数据绑定及配置选项的完整代码示例。
Vue 集成 Chart.js 实现方案
指令
该指令的作用是在 DOM 渲染完成后触发执行。这是因为部分非 Vue 插件要求 DOM 元素必须存在时才能正确运行,因此需要确保渲染时机。
Vue.directive('loaded-callback', {
inserted: function (el, binding, vnode) {
binding.value(el, binding, vnode)
}
})
安装 Chart.js
安装 chartjs
npm install chart.js --save
封装 Chart.js 组件
chartjs 组件
<template>
<canvas refs="chartcanvas" v-loaded-callback="setCanvas"></canvas>
</template>
<script type="text/javascript">
require('chart.js')
export default{
name: 'components-base-chartjs',
props: {
'data': {},
'options': {},
'type': {}
},
data:function(){
return {
canvas: null,
chart: null
}
},
watch:{
canvas: function () { // chart对象生成时触发
this.initChart()
},
data: {
handler: function () { // 数据变化时触发
this.updateChart()
},
deep: true
}
},
destoryed:function (){
if(this.cahrt){
this.cahrt.destroy()
}
},
computed: {
currentOptions: function (){
var options = {}
if(this.options){ // 加载自定义配置参数
for(var i in this.options){
options[i] = this.options[i]
}
}
return options
}
},
methods: {
setCanvas: function(el){ // dom生成时触发
this.canvas = el
},
initChart: function () { // 更新chart结果
if(this.data && this.currentOptions){ // 保证参数的存在
this.chart = new Chart(this.canvas.getContext('2d'),{
type: this.type,
data: this.data,
options: this.currentOptions
})
}
},
updateChart: function () { // 更新chart结果
this.chart.data = JSON.parse(JSON.stringify(this.data))
this.chart.update()
}
}
}
</script>
组件使用与配置
用法
<chartjs :options="options" type="pie" :data="data"></chartjs>
options 及数据结构
请跳转
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
作者最新文章
JS监听滚动事件:回到顶部按钮的显示与隐藏逻辑
2026-11-05 16:19:37
JavaScript怎么读写LocalStorage与SessionStorage
2026-11-05 15:40:11
anime.js 与 GSAP 对比:轻量级项目该怎么选择动画库
2026-11-05 11:24:55
flv.js 与 hls.js 在直播场景下的选型对比
2026-11-05 08:18:52
JavaScript能做什么?前端开发中的作用与应用场景解析
2026-11-04 23:17:54








