質問編集履歴

3

内容修正

2021/06/13 21:23

投稿

TMTN
TMTN

score51

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  ```
18
18
 
19
- こちらにつきましては、エラーコード内にあるURLを確認すると[反応性の宣言](https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties)以下のように書かれておりました。
19
+ こちらにつきましては、エラーコード内にあるURLを確認すると[反応性の宣言](https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties)以下のように書かれておりました。
20
20
 
21
21
 
22
22
 

2

内容訂正。

2021/06/13 21:23

投稿

TMTN
TMTN

score51

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 上記より2つエラーが出ております。
5
+ 上記より2つエラーが出ている状況です。
6
6
 
7
7
 
8
8
 

1

内容修正

2021/06/13 12:45

投稿

TMTN
TMTN

score51

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,3 @@
1
- # エラーコード: Error in render: "TypeError: Cannot read property 'uid' of undefined"を解消したい
2
-
3
-
4
-
5
1
  ![イメージ説明](91a2546d8c9a06f48048ee67241cd506.png)
6
2
 
7
3
 
@@ -38,6 +34,40 @@
38
34
 
39
35
 
40
36
 
37
+ ```ここに言語を入力
38
+
39
+ export default {
40
+
41
+ components: { Nl2br },
42
+
43
+ data() {
44
+
45
+ return {
46
+
47
+ user: {}, // ユーザー情報
48
+
49
+ chat: [], // 取得したメッセージを入れる配列
50
+
51
+ input: "", // 入力したメッセージ
52
+
53
+ userIds: [],
54
+
55
+ userDatas: [],
56
+
57
+ uid: "",
58
+
59
+ authenticatedUser: "",
60
+
61
+ preview: require("../assets/デフォルト画像.jpg"),
62
+
63
+ };
64
+
65
+ },
66
+
67
+ ```
68
+
69
+
70
+
41
71
  #2つ目
42
72
 
43
73
 
@@ -90,8 +120,250 @@
90
120
 
91
121
 
92
122
 
123
+ #chat.vue
124
+
125
+
126
+
93
127
  ```ここに言語を入力
94
128
 
129
+ <template>
130
+
131
+ <div class="chat">
132
+
133
+ <div class="chat-header flex">
134
+
135
+ <h1 class="chat-tll flash neon flex">Chat Room</h1>
136
+
137
+ <slide right disableOutsideClick width="200">
138
+
139
+ <router-link to="/" class="header-link neon3 flash">HOME</router-link>
140
+
141
+ <router-link to="/about" class="header-link neon3 flash"
142
+
143
+ >ABOUT</router-link
144
+
145
+ >
146
+
147
+ <router-link :to="`/board/${this.uid}`" class="header-link neon3 flash"
148
+
149
+ >POST</router-link
150
+
151
+ >
152
+
153
+ <router-link
154
+
155
+ to="/signup"
156
+
157
+ class="header-link neon3 flash"
158
+
159
+ v-if="!authenticatedUser"
160
+
161
+ >SINGUP</router-link
162
+
163
+ >
164
+
165
+ <router-link
166
+
167
+ to="/signin"
168
+
169
+ class="header-link neon3 flash"
170
+
171
+ v-if="!authenticatedUser"
172
+
173
+ >SINGIN</router-link
174
+
175
+ >
176
+
177
+ <router-link :to="`/mypage/${this.uid}`" class="header-link neon3 flash"
178
+
179
+ >MYPAGE</router-link
180
+
181
+ >
182
+
183
+ </slide>
184
+
185
+ <div id="page-wrap"></div>
186
+
187
+ </div>
188
+
189
+ <!--Firebase から取得したリストを描画-->
190
+
191
+ <transition-group name="chat" tag="div" class="list content">
192
+
193
+ <!--chatの中の{ key, name, image, message ,userid }をそれぞれ取得-->
194
+
195
+ <section
196
+
197
+ v-for="{ key, name, image, message, userid, time } in chat"
198
+
199
+ :key="key"
200
+
201
+ >
202
+
203
+ <div v-if="userid === user.uid" class="myitem flex">
204
+
205
+ <!-- 自身 -->
206
+
207
+ <!--「画像」の指定-->
208
+
209
+
210
+
211
+ <!--「名前」と「メッセージ」の指定-->
212
+
213
+ <div class="mydetail">
214
+
215
+ <div class="mytime">{{ $dayjs(time).format("HH:mm") }}</div>
216
+
217
+ <div @click.right.prevent="deleteMessage(key)" class="mymessage">
218
+
219
+ <nl2br tag="div" :text="message" />
220
+
221
+ </div>
222
+
223
+ </div>
224
+
225
+ <div class="myimage flex">
226
+
227
+ <img :src="user.photoURL" width="50" height="50" />
228
+
229
+ <div class="myname flex">{{ user.displayName }}</div>
230
+
231
+ </div>
232
+
233
+ </div>
234
+
235
+ <div v-else class="otheritem flex">
236
+
237
+ <!-- 自身ではない -->
238
+
239
+ <!--「画像」の指定-->
240
+
241
+ <div class="otherimage flex">
242
+
243
+ <router-link :to="`/mypage/${returnUserData(userid).uid}`">
244
+
245
+ <img
246
+
247
+ :src="
248
+
249
+ returnUserData(userid)
250
+
251
+ ? returnUserData(userid).uploadedImage.fileUrl
252
+
253
+ : preview
254
+
255
+ "
256
+
257
+ width="50"
258
+
259
+ height="50"
260
+
261
+ />
262
+
263
+ <div class="othername flex">
264
+
265
+ {{
266
+
267
+ returnUserData(userid)
268
+
269
+ ? returnUserData(userid).name
270
+
271
+ : "NO NAME"
272
+
273
+ }}
274
+
275
+ </div>
276
+
277
+ </router-link>
278
+
279
+ </div>
280
+
281
+ <!--「名前」と「メッセージ」の指定-->
282
+
283
+ <div class="otherdetail">
284
+
285
+ <div class="othermessage">
286
+
287
+ <nl2br tag="div" :text="message" />
288
+
289
+ </div>
290
+
291
+ <div class="othertime">{{ $dayjs(time).format("HH:mm") }}</div>
292
+
293
+ </div>
294
+
295
+ </div>
296
+
297
+ </section>
298
+
299
+ </transition-group>
300
+
301
+
302
+
303
+ <!-- 入力フォームの設定 -->
304
+
305
+ <div class="message-inner flex">
306
+
307
+ <form action @submit.prevent="doSend" class="form flex">
308
+
309
+ <textarea
310
+
311
+ v-model="input"
312
+
313
+ placeholder="メッセージを入力"
314
+
315
+ :disabled="!user.uid"
316
+
317
+ @keydown.enter.exact.prevent="doSend"
318
+
319
+ ></textarea>
320
+
321
+ <!-- ユーザーでなければ無効化 -->
322
+
323
+ <button type="submit" :disabled="!user.uid" class="send-button">
324
+
325
+ <img src="../assets/電球.jpg" class="send-img" alt="送信" />
326
+
327
+ </button>
328
+
329
+ </form>
330
+
331
+ </div>
332
+
333
+ </div>
334
+
335
+ </template>
336
+
337
+ ```
338
+
339
+
340
+
341
+ ```
342
+
343
+ <script>
344
+
345
+ import firebase from "firebase";
346
+
347
+ import Nl2br from "vue-nl2br";
348
+
349
+ import Vue from "vue";
350
+
351
+ // 改行を <br> タグに変換するモジュール
352
+
353
+ import dayjs from "dayjs";
354
+
355
+ import { Slide } from "vue-burger-menu";
356
+
357
+ Vue.component("slide", Slide);
358
+
359
+
360
+
361
+ dayjs.locale("ja");
362
+
363
+ Vue.prototype.$dayjs = dayjs;
364
+
365
+
366
+
95
367
  export default {
96
368
 
97
369
  components: { Nl2br },
@@ -120,538 +392,264 @@
120
392
 
121
393
  },
122
394
 
395
+ created() {
396
+
397
+ firebase.auth().onAuthStateChanged((user) => {
398
+
399
+ // ログイン状態ならuserが取得できる
400
+
401
+ this.user = user ? user : {};
402
+
403
+ //userにはログイン中のユーザー情報(Firebaseのデータ)が保存されている。
404
+
405
+ const ref_message = firebase.database().ref(this.$route.params.id);
406
+
407
+
408
+
409
+ if (user) {
410
+
411
+ this.chat = [];
412
+
413
+ //limitToLast(10)で並べ替えられた「ref_message」の最後の10個を取得し、on()で変更があったときのハンドラを登録。
414
+
415
+ ref_message.limitToLast(10).on("child_added", this.childAdded);
416
+
417
+ } else {
418
+
419
+ //off()は、変更があったときのハンドラを解除
420
+
421
+ ref_message.limitToLast(10).off("child_added", this.childAdded);
422
+
423
+ }
424
+
425
+ });
426
+
427
+ },
428
+
429
+ methods: {
430
+
431
+ // スクロール位置を一番下に移動
432
+
433
+ scrollBottom() {
434
+
435
+ this.$nextTick(() => {
436
+
437
+ //this.$nextTickは、再描画を待つ。絶対値からbody要素の高さを取得。
438
+
439
+ window.scrollTo(0, document.body.clientHeight);
440
+
441
+ });
442
+
443
+ },
444
+
445
+ childAdded(snap) {
446
+
447
+ const message = JSON.parse(JSON.stringify(snap.val()));
448
+
449
+ if (!this.userIds.includes(String(message.userid))) {
450
+
451
+ this.userIds.push(String(message.userid));
452
+
453
+ //this.userIds(配列)にuserid含まれていていなければthis.userIds(配列)に追加。
454
+
455
+
456
+
457
+ let self = this;
458
+
459
+
460
+
461
+ firebase
462
+
463
+ .firestore()
464
+
465
+ .collection("users")
466
+
467
+ .doc(message.userid)
468
+
469
+ .get()
470
+
471
+ .then((snapshot) => {
472
+
473
+ self.userDatas.push(snapshot.data());
474
+
475
+ });
476
+
477
+ //メッセージを送信したuserid(ログイン中のユーザーid)の情報をuserDatasに保存
478
+
479
+ }
480
+
481
+ //データベースに新しい要素が追加されると随時呼び出される
482
+
483
+ this.chat.push({
484
+
485
+ key: snap.key,
486
+
487
+ name: message.name,
488
+
489
+ image: message.image,
490
+
491
+ message: message.message,
492
+
493
+ userid: message.userid,
494
+
495
+ time: message.time,
496
+
497
+ });
498
+
499
+ this.scrollBottom();
500
+
501
+ //スクロールの一番下に追加。
502
+
503
+ },
504
+
505
+ doSend() {
506
+
507
+ const time = time;
508
+
509
+ if (this.user.uid && this.input.length) {
510
+
511
+ //以下でFirebaseに書き込まれたメッセージを追加
512
+
513
+ firebase
514
+
515
+ .database()
516
+
517
+ .ref(this.$route.params.id)
518
+
519
+ .push(
520
+
521
+ {
522
+
523
+ message: this.input,
524
+
525
+ name: this.user.displayName,
526
+
527
+ image: this.user.photoURL,
528
+
529
+ userid: this.user.uid,
530
+
531
+ time: firebase.database.ServerValue.TIMESTAMP,
532
+
533
+ },
534
+
535
+
536
+
537
+ () => {
538
+
539
+ this.input = ""; //フォームを空にする
540
+
541
+ }
542
+
543
+ );
544
+
545
+ }
546
+
547
+ },
548
+
549
+ returnUserData(id) {
550
+
551
+ const userData = this.userDatas.find((user) => user.uid === id);
552
+
553
+ //methodsなので引数に渡した値(id)はtemplate内の引数(userid)を渡していること。
554
+
555
+ //this.userDatas(配列)に入っている値uesr.uidとidが一致したものを一つuserData(配列)に保存。
556
+
557
+ return userData;
558
+
559
+ },
560
+
561
+ deleteMessage(key) {
562
+
563
+ firebase
564
+
565
+ .database()
566
+
567
+ .ref(this.$route.params.id + "/" + key)
568
+
569
+ .remove();
570
+
571
+ this.$swal({
572
+
573
+ title: "内容確認",
574
+
575
+ text: "メッセージを削除しますか?",
576
+
577
+ icon: "warning",
578
+
579
+ buttons: true,
580
+
581
+ dangerMode: true,
582
+
583
+ })
584
+
585
+ .then((willDelete) => {
586
+
587
+ if (willDelete) {
588
+
589
+ this.$swal("メッセージを削除しました", {
590
+
591
+ icon: "success",
592
+
593
+ });
594
+
595
+ this.$router.go({
596
+
597
+ path: `/chat/${this.$route.params.id}`,
598
+
599
+ force: true,
600
+
601
+ });
602
+
603
+ } else {
604
+
605
+ this.$swal("キャンセルしました。");
606
+
607
+ }
608
+
609
+ })
610
+
611
+ .catch(() => {
612
+
613
+ this.$swal("メッセージを削除出来ません。", {
614
+
615
+ icon: "error",
616
+
617
+ });
618
+
619
+ });
620
+
621
+ },
622
+
623
+ },
624
+
625
+ mounted() {
626
+
627
+ //以下、ユーザーが認証済みであれば表示・非表示を設定
628
+
629
+ firebase.auth().onAuthStateChanged((user) => {
630
+
631
+ const currentUser = firebase.auth().currentUser;
632
+
633
+ this.uid = currentUser.uid;
634
+
635
+
636
+
637
+ if (user) {
638
+
639
+ this.authenticatedUser = true;
640
+
641
+ } else {
642
+
643
+ this.authenticatedUser = false;
644
+
645
+ }
646
+
647
+ });
648
+
649
+ },
650
+
651
+ };
652
+
653
+ </script>
654
+
123
655
  ```
124
-
125
-
126
-
127
-
128
-
129
- ```ここに言語を入力
130
-
131
- <template>
132
-
133
- <div class="chat">
134
-
135
- <div class="chat-header flex">
136
-
137
- <h1 class="chat-tll flash neon flex">Chat Room</h1>
138
-
139
- <slide right disableOutsideClick width="200">
140
-
141
- <router-link to="/" class="header-link neon3 flash">HOME</router-link>
142
-
143
- <router-link to="/about" class="header-link neon3 flash"
144
-
145
- >ABOUT</router-link
146
-
147
- >
148
-
149
- <router-link :to="`/board/${this.uid}`" class="header-link neon3 flash"
150
-
151
- >POST</router-link
152
-
153
- >
154
-
155
- <router-link
156
-
157
- to="/signup"
158
-
159
- class="header-link neon3 flash"
160
-
161
- v-if="!authenticatedUser"
162
-
163
- >SINGUP</router-link
164
-
165
- >
166
-
167
- <router-link
168
-
169
- to="/signin"
170
-
171
- class="header-link neon3 flash"
172
-
173
- v-if="!authenticatedUser"
174
-
175
- >SINGIN</router-link
176
-
177
- >
178
-
179
- <router-link :to="`/mypage/${this.uid}`" class="header-link neon3 flash"
180
-
181
- >MYPAGE</router-link
182
-
183
- >
184
-
185
- </slide>
186
-
187
- <div id="page-wrap"></div>
188
-
189
- </div>
190
-
191
- <!--Firebase から取得したリストを描画-->
192
-
193
- <transition-group name="chat" tag="div" class="list content">
194
-
195
- <!--chatの中の{ key, name, image, message ,userid }をそれぞれ取得-->
196
-
197
- <section
198
-
199
- v-for="{ key, name, image, message, userid, time } in chat"
200
-
201
- :key="key"
202
-
203
- >
204
-
205
- <div v-if="userid === user.uid" class="myitem flex">
206
-
207
- <!-- 自身 -->
208
-
209
- <!--「画像」の指定-->
210
-
211
-
212
-
213
- <!--「名前」と「メッセージ」の指定-->
214
-
215
- <div class="mydetail">
216
-
217
- <div class="mytime">{{ $dayjs(time).format("HH:mm") }}</div>
218
-
219
- <div @click.right.prevent="deleteMessage(key)" class="mymessage">
220
-
221
- <nl2br tag="div" :text="message" />
222
-
223
- </div>
224
-
225
- </div>
226
-
227
- <div class="myimage flex">
228
-
229
- <img :src="user.photoURL" width="50" height="50" />
230
-
231
- <div class="myname flex">{{ user.displayName }}</div>
232
-
233
- </div>
234
-
235
- </div>
236
-
237
- <div v-else class="otheritem flex">
238
-
239
- <!-- 自身ではない -->
240
-
241
- <!--「画像」の指定-->
242
-
243
- <div class="otherimage flex">
244
-
245
- <router-link :to="`/mypage/${returnUserData(userid).uid}`">
246
-
247
- <img
248
-
249
- :src="
250
-
251
- returnUserData(userid)
252
-
253
- ? returnUserData(userid).uploadedImage.fileUrl
254
-
255
- : preview
256
-
257
- "
258
-
259
- width="50"
260
-
261
- height="50"
262
-
263
- />
264
-
265
- <div class="othername flex">
266
-
267
- {{
268
-
269
- returnUserData(userid)
270
-
271
- ? returnUserData(userid).name
272
-
273
- : "NO NAME"
274
-
275
- }}
276
-
277
- </div>
278
-
279
- </router-link>
280
-
281
- </div>
282
-
283
- <!--「名前」と「メッセージ」の指定-->
284
-
285
- <div class="otherdetail">
286
-
287
- <div class="othermessage">
288
-
289
- <nl2br tag="div" :text="message" />
290
-
291
- </div>
292
-
293
- <div class="othertime">{{ $dayjs(time).format("HH:mm") }}</div>
294
-
295
- </div>
296
-
297
- </div>
298
-
299
- </section>
300
-
301
- </transition-group>
302
-
303
-
304
-
305
- <!-- 入力フォームの設定 -->
306
-
307
- <div class="message-inner flex">
308
-
309
- <form action @submit.prevent="doSend" class="form flex">
310
-
311
- <textarea
312
-
313
- v-model="input"
314
-
315
- placeholder="メッセージを入力"
316
-
317
- :disabled="!user.uid"
318
-
319
- @keydown.enter.exact.prevent="doSend"
320
-
321
- ></textarea>
322
-
323
- <!-- ユーザーでなければ無効化 -->
324
-
325
- <button type="submit" :disabled="!user.uid" class="send-button">
326
-
327
- <img src="../assets/電球.jpg" class="send-img" alt="送信" />
328
-
329
- </button>
330
-
331
- </form>
332
-
333
- </div>
334
-
335
- </div>
336
-
337
- </template>
338
-
339
- ```
340
-
341
-
342
-
343
- ```
344
-
345
- <script>
346
-
347
- import firebase from "firebase";
348
-
349
- import Nl2br from "vue-nl2br";
350
-
351
- import Vue from "vue";
352
-
353
- // 改行を <br> タグに変換するモジュール
354
-
355
- import dayjs from "dayjs";
356
-
357
- import { Slide } from "vue-burger-menu";
358
-
359
- Vue.component("slide", Slide);
360
-
361
-
362
-
363
- dayjs.locale("ja");
364
-
365
- Vue.prototype.$dayjs = dayjs;
366
-
367
-
368
-
369
- export default {
370
-
371
- components: { Nl2br },
372
-
373
- data() {
374
-
375
- return {
376
-
377
- user: {}, // ユーザー情報
378
-
379
- chat: [], // 取得したメッセージを入れる配列
380
-
381
- input: "", // 入力したメッセージ
382
-
383
- userIds: [],
384
-
385
- userDatas: [],
386
-
387
- uid: "",
388
-
389
- authenticatedUser: "",
390
-
391
- preview: require("../assets/デフォルト画像.jpg"),
392
-
393
- };
394
-
395
- },
396
-
397
- created() {
398
-
399
- firebase.auth().onAuthStateChanged((user) => {
400
-
401
- // ログイン状態ならuserが取得できる
402
-
403
- this.user = user ? user : {};
404
-
405
- //userにはログイン中のユーザー情報(Firebaseのデータ)が保存されている。
406
-
407
- const ref_message = firebase.database().ref(this.$route.params.id);
408
-
409
-
410
-
411
- if (user) {
412
-
413
- this.chat = [];
414
-
415
- //limitToLast(10)で並べ替えられた「ref_message」の最後の10個を取得し、on()で変更があったときのハンドラを登録。
416
-
417
- ref_message.limitToLast(10).on("child_added", this.childAdded);
418
-
419
- } else {
420
-
421
- //off()は、変更があったときのハンドラを解除
422
-
423
- ref_message.limitToLast(10).off("child_added", this.childAdded);
424
-
425
- }
426
-
427
- });
428
-
429
- },
430
-
431
- methods: {
432
-
433
- // スクロール位置を一番下に移動
434
-
435
- scrollBottom() {
436
-
437
- this.$nextTick(() => {
438
-
439
- //this.$nextTickは、再描画を待つ。絶対値からbody要素の高さを取得。
440
-
441
- window.scrollTo(0, document.body.clientHeight);
442
-
443
- });
444
-
445
- },
446
-
447
- childAdded(snap) {
448
-
449
- const message = JSON.parse(JSON.stringify(snap.val()));
450
-
451
- if (!this.userIds.includes(String(message.userid))) {
452
-
453
- this.userIds.push(String(message.userid));
454
-
455
- //this.userIds(配列)にuserid含まれていていなければthis.userIds(配列)に追加。
456
-
457
-
458
-
459
- let self = this;
460
-
461
-
462
-
463
- firebase
464
-
465
- .firestore()
466
-
467
- .collection("users")
468
-
469
- .doc(message.userid)
470
-
471
- .get()
472
-
473
- .then((snapshot) => {
474
-
475
- self.userDatas.push(snapshot.data());
476
-
477
- });
478
-
479
- //メッセージを送信したuserid(ログイン中のユーザーid)の情報をuserDatasに保存
480
-
481
- }
482
-
483
- //データベースに新しい要素が追加されると随時呼び出される
484
-
485
- this.chat.push({
486
-
487
- key: snap.key,
488
-
489
- name: message.name,
490
-
491
- image: message.image,
492
-
493
- message: message.message,
494
-
495
- userid: message.userid,
496
-
497
- time: message.time,
498
-
499
- });
500
-
501
- this.scrollBottom();
502
-
503
- //スクロールの一番下に追加。
504
-
505
- },
506
-
507
- doSend() {
508
-
509
- const time = time;
510
-
511
- if (this.user.uid && this.input.length) {
512
-
513
- //以下でFirebaseに書き込まれたメッセージを追加
514
-
515
- firebase
516
-
517
- .database()
518
-
519
- .ref(this.$route.params.id)
520
-
521
- .push(
522
-
523
- {
524
-
525
- message: this.input,
526
-
527
- name: this.user.displayName,
528
-
529
- image: this.user.photoURL,
530
-
531
- userid: this.user.uid,
532
-
533
- time: firebase.database.ServerValue.TIMESTAMP,
534
-
535
- },
536
-
537
-
538
-
539
- () => {
540
-
541
- this.input = ""; //フォームを空にする
542
-
543
- }
544
-
545
- );
546
-
547
- }
548
-
549
- },
550
-
551
- returnUserData(id) {
552
-
553
- const userData = this.userDatas.find((user) => user.uid === id);
554
-
555
- //methodsなので引数に渡した値(id)はtemplate内の引数(userid)を渡していること。
556
-
557
- //this.userDatas(配列)に入っている値uesr.uidとidが一致したものを一つuserData(配列)に保存。
558
-
559
- return userData;
560
-
561
- },
562
-
563
- deleteMessage(key) {
564
-
565
- firebase
566
-
567
- .database()
568
-
569
- .ref(this.$route.params.id + "/" + key)
570
-
571
- .remove();
572
-
573
- this.$swal({
574
-
575
- title: "内容確認",
576
-
577
- text: "メッセージを削除しますか?",
578
-
579
- icon: "warning",
580
-
581
- buttons: true,
582
-
583
- dangerMode: true,
584
-
585
- })
586
-
587
- .then((willDelete) => {
588
-
589
- if (willDelete) {
590
-
591
- this.$swal("メッセージを削除しました", {
592
-
593
- icon: "success",
594
-
595
- });
596
-
597
- this.$router.go({
598
-
599
- path: `/chat/${this.$route.params.id}`,
600
-
601
- force: true,
602
-
603
- });
604
-
605
- } else {
606
-
607
- this.$swal("キャンセルしました。");
608
-
609
- }
610
-
611
- })
612
-
613
- .catch(() => {
614
-
615
- this.$swal("メッセージを削除出来ません。", {
616
-
617
- icon: "error",
618
-
619
- });
620
-
621
- });
622
-
623
- },
624
-
625
- },
626
-
627
- mounted() {
628
-
629
- //以下、ユーザーが認証済みであれば表示・非表示を設定
630
-
631
- firebase.auth().onAuthStateChanged((user) => {
632
-
633
- const currentUser = firebase.auth().currentUser;
634
-
635
- this.uid = currentUser.uid;
636
-
637
-
638
-
639
- if (user) {
640
-
641
- this.authenticatedUser = true;
642
-
643
- } else {
644
-
645
- this.authenticatedUser = false;
646
-
647
- }
648
-
649
- });
650
-
651
- },
652
-
653
- };
654
-
655
- </script>
656
-
657
- ```