npm
하여 설치한다.npm i vue-chartjs chart.js
import
시킨다.import LineChart from '~/components/common/Chart/LineChart'
components: {
LineChart,
},
component
등록 잊지말기!, 그리고 템플릿에 사용한다.
<template>
<LineChart> </LineChart>
</template>
LineChart.js
수정하기import { Line, mixins } from 'vue-chartjs' //또는 'vue-chartjs/legacy'
const { reactiveProp } = mixins
export default {
extends: Line,
mixins: [reactiveProp],
props: ['options'],
mounted() {
// this.chartData is created in the mixin.
// If you want to pass options please create a local options object
this.renderChart(this.chartData, this.options)
},
}
처음에 동료에게 파일을 전달 받았을 때에는 linechart.js 내에 직접 chartData와 options을 넣으셨는데, options이 먹히지 않아서 왜 그런지 이유를 찾다가 결국 처음 작업부터 잘못되었다는것을 알고 chart.js에 대해서 공부하기 시작했다.
Vue-chartjs 공식 사이트 (https://vue-chartjs.org/)
chart.js에서 작업하는 것이 아니라 작성하고있는 vue페이지에서 props로 넘겨주기 때문에 해당 페이지에서 data들을 작성하여 넘겨주어야 한다.
components를 사용하는 건 "기본 템플릿을 이용하여 다양하게 사용하는것"라고 생각하기 때문에 기본 템플릿 자체를 변경해버리면 component의 재사용성이 무의미 하다고 생각했다. 그래서 lineChart.js를 만들어 주고 부모 component에서 lineChart를 import하고 값을 데이터 바인딩 했다
<line-chart :options="options" :chartData="chartData"></line-chart>
chartData
와 options
값은 필수로 넘겨주어야 한다.
🚨 카멜케이스(camelCase) 로 props의 이름을 정한경우 Dom템플릿 안에서는 케밥케이스(kebab-case)를 사용하여야 올바르게 동작한다.
chartData: {
labels: ['4 / 8', '4 / 9', '4 / 10', '4 / 11', '4 / 12', '4 / 13', '4 / 14', '4 / 15', '4 / 16', '4 / 17'],
datasets: [
{
borderWidth: 1, // 라인 넓이
label: '총 수면 시간', // 데이터 라벨
backgroundColor: 'rgb(255,255,255, 0)',
pointBackgroundColor: '#64CCA2',
fill: true, // 채우기
// barPercentage: 1, 바 안쪽 넓이
// categoryPercentage: 0.5, 바 외부 넓이
tension: 0.1,
borderColor: '#64CCA2',
pointBorderColor: '#64CCA2',
pointBorderWidth: 1,
data: [45, 50, 60, 50, 45, 80, 50, 40, 68, 70],
},
],
},
options
값 셋팅하기options: {
scales: {
xAxes: [
{
stacked: false, // 쌓임
display: true, // x 축 show
scaleLabel: {
display: true,
labelString: '날짜',
},
grid: {
drawBorder: false,
color: '#323232',
lineWidth: 1,
},
ticks: {
beginAtZero: true, // 0부터 시작
padding: 0,
},
},
],
// y축 옵션
yAxes: [
{
stacked: false, // 쌓임
display: true, // y 축 show
ticks: {
stepSize: 20, // 증가범위
beginAtZero: true,
max: 100, // 최대범위
min: 0, // 최소범위
padding: 10, // 오른쪽 간격
},
grid: {
drawBorder: false,
color: '#323232',
lineWidth: 1,
},
},
],
},
},
자세한 options이 정리된건 다음 사이트를 참고하였으나 사라짐 (23.07.20 수정)