回答編集履歴

3

修正

2021/05/13 06:42

投稿

Tatsunosuke
Tatsunosuke

スコア599

test CHANGED
@@ -36,6 +36,12 @@
36
36
 
37
37
 
38
38
 
39
+ //↓このchatは、dataにあるthis.chatです。
40
+
41
+ //this.chatには幾つかのメッセージがあるはずなので、それをitemに代入しています。
42
+
43
+
44
+
39
45
  <div v-for="(item ,index) in chat" :key=index>
40
46
 
41
47
  <div @click.right.prevent="deleteMessage(item.key)" class="mymessage">
@@ -50,7 +56,7 @@
50
56
 
51
57
 
52
58
 
53
- こうすることで、deleteMessage(key)のkeyは、それぞれのメッセージ固有のkeyが渡されますので、
59
+ こうすることで、deleteMessage(key)のkeyは、それぞれのメッセージ固有のkeyが渡されていますので、
54
60
 
55
61
  refにpath入ります。
56
62
 

2

追記

2021/05/13 06:42

投稿

Tatsunosuke
Tatsunosuke

スコア599

test CHANGED
@@ -1,3 +1,99 @@
1
+ 追記ありがとうございます!
2
+
3
+ やはりkeyでしたね。
4
+
5
+
6
+
7
+ そのままdeleteMessage(key)としてもエラーになると思います。
8
+
9
+ ```vue
10
+
11
+ <div @click.right.prevent="deleteMessage" class="mymessage">
12
+
13
+ <nl2br tag="div" :text="message" />
14
+
15
+ </div>
16
+
17
+ ```
18
+
19
+ ここはvueのhtml側の nl2br はコンポーネントを呼び出してると思うのですが、
20
+
21
+ 今のままだと、divの@clickイベントと nl2brが連動してないです。
22
+
23
+
24
+
25
+
26
+
27
+ このあたりを見ていただいて、連動させるか、
28
+
29
+ [v-slotの解説](https://future-architect.github.io/articles/20200428/)
30
+
31
+
32
+
33
+ コンポーネントで呼ぶのではなく、dataの中のchatをv-forで表示するといった方法もありです。
34
+
35
+ ```vue
36
+
37
+
38
+
39
+ <div v-for="(item ,index) in chat" :key=index>
40
+
41
+ <div @click.right.prevent="deleteMessage(item.key)" class="mymessage">
42
+
43
+ {{item.message}}
44
+
45
+ </div>
46
+
47
+ </div>
48
+
49
+ ```
50
+
51
+
52
+
53
+ こうすることで、deleteMessage(key)のkeyは、それぞれのメッセージ固有のkeyが渡されますので、
54
+
55
+ refにpath入ります。
56
+
57
+ ※実際には、親のkeyも 必要になるとは思いますが。
58
+
59
+ ```vue
60
+
61
+ deleteMessage(key) {
62
+
63
+
64
+
65
+ var path = "V5S2...." +key //親のKey +当該メッセージのkey
66
+
67
+  
68
+
69
+ firebase
70
+
71
+   .database()
72
+
73
+   .ref(path)
74
+
75
+ //・・・・
76
+
77
+ ```
78
+
79
+
80
+
81
+ もし、言っている内容がちょっと難しいと感じるようでしたら、先にvueでいくつかサイトを作ってみてもいいと思います!
82
+
83
+ 今作っている内容はまあまあ中級なので、vueの理解が無いとこの先辛くなってくると思います。
84
+
85
+
86
+
87
+ これは余談ですが、vueのレイアウトは(htmlとCSS)、vuetifyを導入するとかなり楽になりますよ。
88
+
89
+ CSSを書くことがすごく減ります。
90
+
91
+
92
+
93
+
94
+
95
+ ---
96
+
1
97
  すみません、databaseを試せるものがないので、想像でのお答えになってしまいますが。。。
2
98
 
3
99
 

1

追記

2021/05/13 06:37

投稿

Tatsunosuke
Tatsunosuke

スコア599

test CHANGED
@@ -1,3 +1,69 @@
1
+ すみません、databaseを試せるものがないので、想像でのお答えになってしまいますが。。。
2
+
3
+
4
+
5
+ これは、DBに値が追加された時に呼び出される関数ですか?
6
+
7
+ この、key: snap.key,はrefのkeyじゃないのでしょうか?
8
+
9
+
10
+
11
+ 取得したきた値全てを一度console.logか何かでチェックしてみるとrefと同じ値が見つかりますので、
12
+
13
+ それをchat等の変数に入れておき、deleteMessageの引数として渡せば、デリートの際にrefが指定できると思います。
14
+
15
+
16
+
17
+ [removeのリファレンス](https://firebase.google.com/docs/reference/js/firebase.database.Reference?hl=ja#remove)
18
+
19
+
20
+
21
+
22
+
23
+ ```vue
24
+
25
+ childAdded(snap) {
26
+
27
+ //snapshotとは、ある時点における特定のデータベース参照にあるデータの全体像を写し取ったもの
28
+
29
+ //childAdded:データベースからアイテムのリストを取得する関数
30
+
31
+ // 受け取ったメッセージをchatに追加
32
+
33
+ const message = snap.val();
34
+
35
+ //イベントのときにデータベース内の「message」データを取得。
36
+
37
+ // データベースに新しい要素が追加されると随時呼び出される
38
+
39
+ this.chat.push({
40
+
41
+ key: snap.key,
42
+
43
+ name: message.name,
44
+
45
+ image: message.image,
46
+
47
+ message: message.message,
48
+
49
+ userid: message.userid,
50
+
51
+ time: message.time,
52
+
53
+ });
54
+
55
+ this.scrollBottom();
56
+
57
+ //スクロールの一番下に追加。
58
+
59
+ },
60
+
61
+ ```
62
+
63
+
64
+
65
+ ---
66
+
1
67
  もっぱらfirestoreなので、少々勝手が違うのですが、
2
68
 
3
69