LoginSignup
4
6

More than 5 years have passed since last update.

Chart.jsのグラフをvue.jsを使って書いてみた2

Last updated at Posted at 2018-12-13

Chart.jsのグラフをvue.jsを使って書いてみた1
前回作ったもの
https://jsfiddle.net/dqnsan/5zrf6whv/

これ見直して思ったけど全くvue.jsを活かしてなくて草
今回からちゃんとするから、、、

というわけで、
ここにボタンを押下したら要素が追加されるようにしていきます。

inputの追加

グラフは
・label
・backgroundColor
・data
の三つで出来ているので
それぞれを追加する処理を書いていきます。

vueのdataに下記を追加


        data: {
            nameSet: 'ビタミンZ',
            numSet: 10,
            colorSet: '#FFFF00',
            chartLists: [
                { name: 'たんぱく質' ,color: '#2ecc71', data: 10 },
                { name: '炭水化物' ,color: '#3498db', data: 30 },
                { name: 'ビタミンA' ,color: '#95a5a6', data: 3 },
                { name: 'ビタミンB' ,color: '#9b59b6', data: 17 }
            ]
        },

そしてやっとvueらしいことをしていきます。
inputをhtmlに追加して「v-model」でデータバインディングをする。

    <form>
        <label>
            栄養名<input type="text" name="" v-model="nameSet" placeholder="例)ビタミンA">
        </label>
        <label>
            数値<input type="number" name="" v-model="numSet">
        </label>
        <input type="color" name="" value="" v-model="colorSet">
        <input type="button" value="追加">
    </form>

これはブラウザによって使えないことあるのでchromeで見てね!

<input type="color" name="" value="" v-model="colorSet">

これでvueに追加したdataの中身が各種inputに入るようになりました。
ブラウザ上でinputの値を変更したらdataの中の値も変わりますね。

それではグラフに追加する処理を書いていきます。


            addChartList: function () {
                //forEachの中ではthisの対象が変わるためselfを使う
                self = this;

                //configの中にinputへ入力して値をpush
                config.data.labels.push(this.nameSet);
                config.data.datasets.forEach(function (dataset) {
                    dataset.backgroundColor.push(self.colorSet);
                    dataset.data.push(self.numSet);
                });

                //Chart.jsに存在するupdate関数を使用
                chart.update();

                //グラフに追加したらinputを初期状態に戻す
                this.nameSet = 'ビタミンZ';
                this.numSet = 10;
                this.colorSet = '#FFFF00';
            }

そしてhtmlにclickしたらイベントが発火するように追加

        <input type="button" value="追加" @click="addChartList()">

こんな感じでしょうか?

vueじゃなかったら「addChartList」の引数に値を渡して追加する感じだと思います。

今回の結果
https://jsfiddle.net/dqnsan/5zrf6whv/6/

次回はバリデートか削除の追加かな、、、

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6