상황
검색해서 나온 데이터들을 chart로 보여주는데,
같은 페이지 내 검색 조건을 다르게 해서 데이터가 달라질 경우 chart를 다시 띄우는데 새로 그려지지가 않는다.
처음에는 canvas is already in use 오류를 만났고
다음에는 차트가 변경되지 않는 오류를 만났다.
오류 설명
canvas is already in use 는 차트가 이미 있는데 또 New Chart()로 생성을 하려고 해서 생긴 오류다.
New Chart()는 처음만들때 한번만 가능하고, 이미 같은 차트가 있는데 또 생성을 할 수는 없다.
재 생성하려면 기존 차트를 없애야 한다.
차트가 변경되지 않는 이유는 분병 리스트의 데이터 값는 달라졌는데 차트가 그대로 유지가된다.
해결방법
1) 차트를 아예 없애고 다시 생성하기 - destroy()
이 방법은 New Chart() 함수를 다시 실행하고 싶을때 사용하는 방법이다.
2) 차트를 업데이트 하기 - update()
기존 차트를 새로운 데이터로 다시 구성하는건데, 나는 데이터만 변경되는거니까 update를 하려고 한다.
update가 안됐던 이유
공식문서를 보니 바로 이유를 알았다.
https://www.chartjs.org/docs/latest/developers/updates.html
데이터를 변경할때 제자리에서 변경됐던것이다.
자바스크립트의 배열(리스트)을 초기화하는 방법에는 여러개가있는데 나는 단순히 데이터만 지웠다.
// 기존코드
dataList = []
for(let i = 0; i < 10; i++) {
dataList[i] = Object.values(val)[i];
}
배열을 초기화 할때 [ ] 로 하면 단순히 내부 데이터만 지우는것이므로
배열을 새롭게 하는 splice를 사용해야한다.
splice는 원본배열을 바꿔서 잘라내어 새로운 배열로 반환하는 함수다.
// 변경코드
dataList.splice(0, dataList.length);
for(let i = 0; i < 10; i++) {
dataList[i] = Object.values(val)[i];
}
도움이 되었다면 좋아요!!
'Front-end > Vue.js' 카테고리의 다른 글
Vue) 자식 -> 부모 컴포넌트에 데이터 넘기기. 부모 컴포넌트에 파라미터 넘기기 emit 사용 방법 (0) | 2024.02.27 |
---|---|
Vue) Property " " was accessed during render but is not defined on instance. 오류 원인 및 해결 (0) | 2024.02.23 |
Vue) chart.js 사이즈 조정하기 (0) | 2023.12.19 |
Vue) Vue3 그래프 그리기 chart.js 적용 방법. 막대그래프, 꺽은선그래프 (0) | 2023.09.08 |
Vue) 절대경로 설정하기 @절대경로 사용할 수 있도록 설정 (0) | 2023.08.08 |