当月と次の7日間のタブを実装する
このステップでは、ユーザーが当月のデータと次の7日間のデータを切り替えることができるタブを実装する方法を学びます。
index.html
ファイルで、Vueインスタンスの data
セクションに、以下のプロパティを追加します。
data: {
type: 1, // 次の7日間と当月のデータの状態
nowMonth: new Date().getMonth(),
},
id="currentMonth"
の <div>
に、monthNumber
と nowMonth
プロパティに基づいた条件付きレンダリングを追加します。これにより、当月のタブのみが表示されます。
<div id="currentMonth" v-if="monthNumber===nowMonth">
<div class="title">
<h3>{{typeTitle}}</h3>
<div class="type" @click="clickType($event)">
<span id="seven" :class="{'active':!type}">The next 7 days</span>
<span id="current" :class="{'active':type}">The current month</span>
</div>
</div>
</div>
Vueインスタンスの methods
セクションに、clickType()
メソッドを追加します。このメソッドは、クリックされたタブに基づいて type
、typeTitle
、yData
、および xData
プロパティを更新し、その後チャートを再レンダリングするために initChart()
メソッドを呼び出します。
clickType(e) {
switch (e.target.id) {
case "seven":
this.type = 0;
this.typeTitle = "The next 7 days";
[this.xData, this.yData] = this.getSevenData();
break;
case "current":
this.type = 1;
this.typeTitle = "The current month";
this.yData = this.data[this.monthNumber][this.monthName];
this.xData = [...this.yData.map((e, i) => i + 1)];
break;
}
this.initChart();
},
getSevenData()
メソッドを追加します。このメソッドは、次の7日間のx軸のラベルとy軸のデータを計算します。
getSevenData() {
let newXdata = [],
newYdata = [];
for (let i = 0; i < 7; i++) {
let now = new Date();
let time = now.getTime() + 1000 * 60 * 60 * 24 * i;
now.setTime(time);
newXdata.push(`${now.getMonth() + 1}/${now.getDate()}`);
if (this.monthNumber === now.getMonth()) {
newYdata.push(this.yData[now.getDate() - 1]);
} else {
let nextMonth = this.data[now.getMonth()];
for (const key in nextMonth) {
newYdata.push(nextMonth[key][now.getDate() - 1]);
}
}
}
return [newXdata, newYdata];
},
このメソッドは、月の切り替えを考慮して、次の7日間のx軸のラベルとy軸のデータを計算します。
ファイルを保存し、ページを再読み込みして更新されたチャートを確認します。以下の図は、「当月」と「次の7日間」を切り替えた際の効果を示しています(時間関数を通じて取得したもので、ここでは4月を想定)。
月の切り替え効果は以下の通りです。