最初に | vue-chartjs
で、例にならって次の2つのファイルを用意しました。
- LineChart.js
- Chart.vue
「LineChart.js」の方で基本的な設定を行い、「Chart.vue」でデータやオプションを入れていくという感じです。新しいグラフを作るのに触るのは「Chart.vue」で、「LineChart.js」は基本的に触りません。またデータはAPIを利用してJSON形式で取得し、そのままpropsに入れます。まあこの記事ではvue-chartjsの詳しい使い方には触れませんので、ドキュメント等見てください。
グラフのオプションはデータを一緒にグラフごとに渡す必要がある
「塗りつぶしのない複数の折れ線グラフを作る」場合にチャートに渡すデータはこうなります。グラフのデザインに関するオプションが各グラフのデータに入ってしまっているのが気になります。上で想定した設計では、APIの方でグラフデザインに関するオプションを設定するか、APIから返ってきたデータ内の各グラフにVue側で値を設定していくことになりますが、前者は「グラフのデータだけを返す」というAPIのシンプルな設計を壊すことになるし、後者は処理が煩雑になります。なんとかならないのか。
Chart.jsのドキュメントにはこういう記述があるんですが、
Default Options
It is common to want to apply a configuration setting to all created line charts. The global line chart settings are stored in Chart.defaults.line. Changing the global options only affects charts created after the change. Existing charts are not changed.
For example, to configure all line charts with spanGaps = true you would do:
Chart.defaults.line.spanGaps = true;
それに該当する設定方法がvue-chartjsに見当たらないんですよね。
解決方法
optionsをpropsで渡すようにして、そのoptionsを次の通りに設定するとグラフのでフォルト値を設定できます。Chart.vue全体はこんな感じ。
なんでこう書くと適用されるのかよくわかりませんが(
こういうの、どこかにまとまってたりしないのかな……
追記
Chart.jsの公式ドキュメントのここにまとまってました。Elements · Chart.js documentation
上記「解決方法」で書いた書式と公式ドキュメントの内容に基づいて設定を書けば反映されるみたいです。なるほど。