teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

文章修正

2021/02/09 09:31

投稿

riki01
riki01

スコア10

title CHANGED
File without changes
body CHANGED
@@ -203,4 +203,7 @@
203
203
  また、package.jsonではnuxt": "^2.14.12"となっております。
204
204
 
205
205
  こちら他のサイトでご質問してからしばらく時間が経ちましたのでここでも質問させて頂きました。
206
- ご了承下さいませ。
206
+ ご了承下さいませ。
207
+ ↑こちらにつきましては余り好ましくない行為だと知らずしてしまいました。申し訳ありません。
208
+ 最初に投稿していたものは削除させて頂きました。
209
+ 宜しくお願い致します。

3

文章の修正です。

2021/02/09 09:31

投稿

riki01
riki01

スコア10

title CHANGED
File without changes
body CHANGED
@@ -202,5 +202,5 @@
202
202
 
203
203
  また、package.jsonではnuxt": "^2.14.12"となっております。
204
204
 
205
- こちらのスタックオーバーフローの方でご質問してからしばらく時間が経ちましたので他の場所でも質問させて頂きました。
205
+ こちらサイトでご質問してからしばらく時間が経ちましたのでここでも質問させて頂きました。
206
206
  ご了承下さいませ。

2

文章修正

2021/02/09 07:49

投稿

riki01
riki01

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,18 +1,206 @@
1
- お世話になっております。
2
- 以下の課題が解決できず困っておりますので、どなたかご教示頂けますとありがたいです。
3
- ###課題
4
- vue-chart.jsチャート図に値渡す際に、1度リロードを挟まなければチャート図が更新されない。
1
+ vue-chart.jsチャート図を表示している部分関して一旦リロードを挟まなければグラフが更新されない状況です
5
- ###ゴール
6
- 送信ボタンを押すことで、トータル時間とチャート図の両方がリアルタイムで変更する様になる。
7
- ###試したこと
8
- [Main.vue138行目](https://github.com/yoshida-riki/TimeOverGrow-new/blob/4680f1b6b0b2bac721a9c4fca7de1fe4d6a41981/components/Main.vue#L138)
9
- で複数の変数に対してconsole.log() を挟みデバックを試みましたが、どこでおかしくなっているのか分かりませんでした。
10
- ###疑問点
11
- this.BarChartData.datasets[0] とthis.vuechartData[0] の扱いの違いが良くわかっておりません。
12
- リアクティブにチャート図を変更するならばthis.BarChartData.datasets[0] だけで十分だと思うのですが、this.vuechartData[0] に値を格納しなければチャート図自体が反映されなくなります。
13
2
 
3
+ 色々試してみたのですが、原因がわからず困っております。
4
+ もし宜しければご教示頂けないでしょうか?宜しくお願い致します。
5
+ ```
6
+ <template>
7
+ <div>
8
+ <client-only>
9
+ <v-row class="container d-flex justify-center">
10
+ <v-col cols="12" sm="6" md="5" class="p-0">
14
- 曖昧な質問で申し訳ありませんが、かなり苦戦しておりますのでどなたかアドバイスして下さりますと幸いです。
11
+ <TotalTime :times="times" />
12
+ </v-col>
13
+ <v-col v-if="initialLoaded" cols="12" sm="6" md="7" class="p-0">
14
+ <Chart :chart-data="BarChartData" :options="BarChartOptions" />
15
+ </v-col>
16
+ </v-row>
17
+ <TextBox :on-add="add" class="container" />
18
+ <Spinner v-if="!initialLoaded" class="container" />
19
+ <p v-else-if="initialLoaded && messages.length === 0" class="no-messages">毎日の積み上げ0件</p>
20
+ <MessageList :messages="reversedMessages" class="container" />
21
+ </client-only>
22
+ </div>
23
+ </template>
15
24
 
25
+ <script>
16
- また、他のサイトで最初上記と同様のご質問をさせて頂きましたが、長時間たっても回答が得られなかった為こちらで同じ質問をさせて頂いております。
26
+ import MessageModel from '../models/Message'
27
+ import TotalTime from './TotalTime'
28
+ import Chart from './Chart'
29
+ import TextBox from './TextBox'
30
+ import Spinner from './Spinner'
31
+ import MessageList from './MessageList'
17
32
 
33
+ export default {
34
+ components: {
35
+ TotalTime,
36
+ Chart,
37
+ TextBox,
38
+ Spinner,
39
+ MessageList
40
+ },
41
+ data() {
42
+ return {
43
+ num: 0,
44
+ name: '',
45
+ index: '',
46
+ done: false,
47
+ messages: [],
48
+ vuechartData: [],
49
+ // options: {},
50
+ times: 0,
51
+ initialLoaded: false,
52
+ BarChartData: {
53
+ labels: ['学習時間'],
54
+ datasets: [
55
+ {
56
+ label: ['学習時間'],
57
+ data: [],
58
+ backgroundColor: ['rgba(54, 162, 235, 0.2)'],
59
+ borderColor: ['rgba(54, 162, 235, 1)']
60
+ }
61
+ ]
62
+ },
63
+ BarChartOptions: {
64
+ responsive: true,
65
+ maintainAspectRatio: false,
66
+ scales: {
67
+ xAxes: [
68
+ {
69
+ stacked: true,
70
+ scaleLabel: {
71
+ display: true,
72
+ labelString: ''
73
+ }
74
+ }
75
+ ],
76
+ yAxes: [
77
+ {
78
+ ticks: {
79
+ beginAtZero: true,
80
+ max: 1000,
81
+ stepSize: 100,
82
+ callback(label) {
83
+ return label + ' h'
84
+ }
85
+ }
86
+ }
87
+ ]
88
+ },
89
+ tooltips: {
90
+ callbacks: {
91
+ label(tooltipItem) {
92
+ return tooltipItem.yLabel + ' h'
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ },
99
+ computed: {
100
+ reversedMessages() {
101
+ return this.messages.slice().reverse()
102
+ }
103
+ },
104
+ async created() {
105
+ const messages = await this.fetchMessages()
106
+ const times = await this.totalTime()
107
+ const vuechartData = await this.getChart()
108
+
109
+ this.messages = messages
110
+ this.times = times
111
+
112
+ if (this.vuechartData.length === 0) {
113
+ this.vuechartData.push(vuechartData)
114
+ }
115
+ this.BarChartData.datasets[0].data[0] = vuechartData[0]
116
+ this.initialLoaded = true
117
+ },
118
+
119
+ methods: {
120
+ // async deleteMessage(message) {
121
+ // if (message !== undefined) {
122
+ // try {
123
+ // await this.messages.pop(message)
124
+ // await dbMessages.doc(message).delete()
125
+ // this.times = await MessageModel.dbtime()
126
+
127
+ // const vuechartData = await this.getChart()
128
+
129
+ // console.log(this.times);
130
+ // console.log(vuechartData[0]);
131
+ // console.log(this.BarChartData.datasets[0].data[0]);
132
+
133
+ // this.BarChartData.datasets[0].data[0] = await vuechartData[0]
134
+
135
+ // console.log(this.BarChartData.datasets[0].data[0]);
136
+ // } catch (error) {
137
+ // console.error(error)
138
+ // }
139
+ // } else {
140
+ // alert('削除する積み上げがありません。。。')
141
+ // }
142
+ // },
143
+ async add(message) {
144
+ this.messages.push(message)
145
+ this.times += message.time
146
+
147
+ const chartdbtime = await MessageModel.dbtime()
148
+ if (this.vuechartData.length === 0) {
149
+ this.vuechartData.push(chartdbtime)
150
+ }
151
+ console.log(chartdbtime)
152
+ console.log(this.BarChartData.datasets[0].data[0])
153
+ console.log(this.vuechartData)
154
+ this.BarChartData.datasets[0].data[0] = chartdbtime
155
+ this.vuechartData[0] = chartdbtime
156
+ },
157
+ async fetchMessages() {
158
+ try {
159
+ let messages = []
160
+ messages = await MessageModel.fetchMessages()
161
+ return messages
162
+ } catch (error) {
163
+ alert(error.message)
164
+ }
165
+ },
166
+ async totalTime() {
167
+ try {
168
+ let times = 0
169
+ const time = await MessageModel.dbtime()
170
+ times += time
171
+ return times
172
+ } catch (error) {
173
+ alert(error.message)
174
+ }
175
+ },
176
+ async getChart() {
177
+ try {
178
+ const chartdbtime = await MessageModel.dbtime()
179
+ if (this.BarChartData.datasets[0].data[0] === 0) {
180
+ this.vuechartData.push(chartdbtime)
181
+ }
182
+ this.vuechartData[0] = chartdbtime
183
+ return this.vuechartData
184
+ } catch (error) {
185
+ alert(error.message)
186
+ }
187
+ }
188
+ }
189
+ }
190
+ </script>
191
+
192
+ <style scoped>
193
+ .no-messages {
194
+ text-align: center;
195
+ }
196
+ .container {
197
+ max-width: 1300px;
198
+ margin: 0 auto;
199
+ }
200
+ </style>
201
+ ```
202
+
203
+ また、package.jsonではnuxt": "^2.14.12"となっております。
204
+
205
+ こちらのスタックオーバーフローの方でご質問してからしばらく時間が経ちましたので他の場所でも質問させて頂きました。
18
- 宜しくお願致し
206
+ ご了承下さいま

1

文章の修正です。

2021/02/09 07:44

投稿

riki01
riki01

スコア10

title CHANGED
File without changes
body CHANGED
@@ -12,4 +12,7 @@
12
12
  リアクティブにチャート図を変更するならばthis.BarChartData.datasets[0] だけで十分だと思うのですが、this.vuechartData[0] に値を格納しなければチャート図自体が反映されなくなります。
13
13
 
14
14
  曖昧な質問で申し訳ありませんが、かなり苦戦しておりますのでどなたかアドバイスして下さりますと幸いです。
15
+
16
+ また、他のサイトで最初上記と同様のご質問をさせて頂きましたが、長時間たっても回答が得られなかった為こちらで同じ質問をさせて頂いております。
17
+
15
18
  宜しくお願い致します。