yuheijotaki.com

【学習メモ】動かして学ぶ!Vue.js 開発入門 その5

Chapter7 Google Charts と連動させてみよう

02 Google Chartsと連動させる

<div id="chart_div" style="height: 500px;"></div>
<div id="app">
  <ul>
    <li v-for="(item,c) in dataArray" v-if="c>0">{{ item[0] }}:{{ item[1] }}
      <button v-on:click="addOne(c)">1票足す</button>
    </li>
  </ul>
</div>

v-if="c>0"はデータを2つ目以降からの表示にするため(['種類', '個数']はデータに入れない)

// グラフに使うデータ
var orgdata = [
  ['種類', '個数'],
  ['野球', 3], ['サッカー', 4], ['バドミントン', 5],
  ['陸上', 1], ['ラグビー', 3], ['その他', 1]
];
google.charts.load('current', { packages: ['corechart'] });
google.charts.setOnLoadCallback(drawBasic);

// グラフを表示する関数
function drawBasic() {
  var data = google.visualization.arrayToDataTable(orgdata);
  var options = { title: '好きなスポーツ', "is3D": true };
  var chart = new google.visualization.PieChart(
    document.getElementById('chart_div'));
  chart.draw(data, options);
}

new Vue({
  el: "#app",
  data: {
    dataArray: orgdata
  },
  methods: {
    addOne: function (val) {
      // `val` 指定されたランチ番号
      var obj = this.dataArray[val]; // 指定されたスポーツの投票数
      obj[1]++; // +1 する
      this.dataArray.splice(val, 1, obj); // `obj` と `splice` で入れ替える
      drawBasic(); // 図を再描画
      console.log(orgdata);
    }
  }
});

結果

f:id:jotaki:20190116090050p:plain