Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

wintertreey 님의 블로그

구글차트 구현하기 본문

Vue

구글차트 구현하기

wintertreey 2024. 8. 7. 19:12

뷰에서 다양한 라이브러리를 사용할 수있다.

구글차트를 그려보자.

 

구글차트를 위한 src

<script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.prod.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

 

 

보여줄 정보를 기입하고, 차트로 보여주기위한 포맷은 다음과 같다. 참고하자.

 

 

부트스트랩 사용

 

상단에 링크추가

<>태그에 class로 값 부여해주기

 

 

전체소스코드는 다음과 같다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@3.2.31/dist/vue.global.prod.js"></script>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script src="https://unpkg.com/vue@3"></script>

    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
    <script>
        let datas = [
            ['도시락', 3], ['김밥', 6], ['햄버거', 2], ['피자', 1], ['도넛', 8]
        ];


        google.charts.load('current', {packages: ['corechart']});
        google.charts.setOnLoadCallback(drawFunc);

        function drawFunc(){
            let data = google.visualization.arrayToDataTable([
                ['종류', '갯수'], ...datas 
                //2차원배열됨. // 0행['도시락', 3] 1행['김밥', 6] ..
            ]);
            let options = {title:'먹고싶은 음식', is3D:true};
            let chart = new google.visualization.PieChart(document.querySelector('#chart_div'));
            chart.draw(data, options);
        }
    </script>
</head>
<body>
    <h2>구글 차트(원 그래프) 그리기</h2>
    메뉴선택 <br>
    <div id="chart_div" style="height: 500px;"></div>

    <div id="app" class="container mt-4">
        <ul class="list-group">
            <li v-for="(value, index) in dataArray" :key="index" class="list-group-item d-flex justify-content-between align-items-center">
            {{value[0]}} : {{value[1]}}
            <button class="btn btn-primary btn-sm me-2" @click="addOneFunc(index)">1 증가</button>
            <button class="btn btn-secondary btn-sm" @click="subOneFunc(index)">1 감소</button>
            </li>
        </ul>
    </div>

    <script>
        const {createApp} = Vue;

        createApp({
            data(){
                return{
                    dataArray: datas
                }
            },
            methods: {
                addOneFunc(index){
                    this.dataArray[index][1]++; 
                    this.updateChart();
                },
                subOneFunc(index){
                    if(this.dataArray[index][1] > 0){ //조건주기. 값을 0까지만 가능하도록. 
                        this.dataArray[index][1]--; 
                        this.updateChart();
                    }
                },
                updateChart(){
                    drawFunc();
                }
            },
        }).mount('#app');
    </script>
</body> 
</html>

 

 

출력결과