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

質問編集履歴

3

内容訂正

2021/06/24 14:30

投稿

TMTN
TMTN

スコア53

title CHANGED
File without changes
body CHANGED
@@ -1,29 +1,22 @@
1
- ブックマーク機能を作成たのですが、画面上リアルタイムで「ブックマーク保存」と「ブックマーク未保存」を切り替えたいです。
1
+ ブックマーク機能を実装ており、画面上リアルタイムで「ブックマーク保存」と「ブックマーク未保存」を切り替えたいです。
2
2
 
3
3
  現状、手動でリロードしないとリアルタイムで画面は切り替わっていない状況です。
4
- Firestoreでは画面上で保存・削除ともに動作はしているのですが、リアルタイムで動作を確認できるようにしたいです。
4
+ Firestoreでは画面上で保存・削除ともに動作はしているのですが、
5
+ 手動でリロードせずともリアルタイムで動作を確認できるようにしたいです。
5
6
 
6
7
  ![イメージ説明](255d091741af058554f82fd2cf575a70.png)
7
8
 
8
9
  表示コードは以下のようになっております。
9
10
 
10
- ```ここに言語を入力
11
- <img
12
- :src="isBookmark"
13
- alt="ブックマーク"
14
- class="bookmark-icon"
15
- @click="deleteBookmark"
16
- v-if="list.isBookmarked"
17
- />
18
- <img
19
- :src="isBookmarked"
20
- alt="ブックマーク"
21
- class="bookmark-icon"
22
- @click="saveBookmark"
23
- v-else
24
- />
25
11
  ```
12
+ <img src="../assets/ブックマーク保存.jpg" alt="ブックマーク" class="bookmark-icon" @click="deleteBookmark" v-if="isBookmarked = true"/>
13
+ <img src="../assets/ブックマーク未保存.jpg" alt="ブックマーク" class="bookmark-icon" @click="saveBookmark" v-else />
14
+ ```
26
15
 
16
+
17
+ 「saveBookmark」したときに、this.isBookmarked=trueにして、v-if, v-elseでthis.isBookmarkedによって、表示するアイコン変えられるようにbookmarkを追加したときに、dataを変更すればいいのかと思い以下のようにしましたが、全ての投稿がtrueになってしまっております・・
18
+
19
+
27
20
  分かる方いらっしゃいましたらお力添えを頂きたいです。
28
21
 
29
22
  よろしくお願いいたします。
@@ -54,14 +47,14 @@
54
47
  <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
55
48
  <!-- 「list.id」propsで親コンポーネントから取得したidを取得。-->
56
49
  <img
57
- :src="isBookmark"
50
+ src="../assets/ブックマーク保存.jpg"
58
51
  alt="ブックマーク"
59
52
  class="bookmark-icon"
60
53
  @click="deleteBookmark"
61
- v-if="list.isBookmarked"
54
+ v-if="isBookmarked = true"
62
55
  />
63
56
  <img
64
- :src="isBookmarked"
57
+ src="../assets/ブックマーク未保存.jpg"
65
58
  alt="ブックマーク"
66
59
  class="bookmark-icon"
67
60
  @click="saveBookmark"
@@ -76,12 +69,11 @@
76
69
 
77
70
 
78
71
  ```js
79
- export default {
72
+
80
- data() {
73
+ data() {
81
74
  return {
82
- isBookmark:require("../assets/ブックマーク保存.jpg"),
83
- isBookmarked:require("../assets/ブックマーク未保存.jpg"),
84
- bookmarkId: "",
75
+ bookmark: require(),
76
+ isBookmarked: false,
85
77
  userDatas: [],
86
78
  preview: require("../assets/デフォルト画像.jpg")
87
79
  };
@@ -99,7 +91,7 @@
99
91
 
100
92
   ~ 省略 ~
101
93
 
102
- saveBookmark() {
94
+ saveBookmark() {
103
95
  const id = firebase
104
96
  .firestore()
105
97
  .collection("users")
@@ -121,86 +113,6 @@
121
113
  this.$swal("ブックマークに追加しました。", {
122
114
  icon: "success"
123
115
  });
124
- })
125
- .catch(() => {
126
- this.$swal("ブックマークを追加出来ません。", {
127
- icon: "error"
128
- });
129
- });
130
- },
131
-
132
- deleteBookmark() {
133
- firebase
134
- .firestore()
135
- .collection("users")
136
- .doc(this.$route.params.uid)
137
- .collection("bookmarks")
138
- .where("postId", "==", this.list.id)
139
- .get()
140
- .then(snapshot => {
141
- snapshot.forEach(doc => {
142
- doc.ref
143
- .delete()
144
- .then(() => {
145
- this.$swal("ブックマークを取り消ししました。", {
146
- icon: "success"
147
- });
148
- })
149
- .catch(() => {
150
- this.$swal("ブックマークを取り消し出来ません。", {
151
- icon: "error"
152
- });
153
- });
154
- });
155
- });
156
- },
157
- </script>
158
- ```
159
-
160
- #追記1
161
-
162
- 「saveBookmark」したときに、this.isBookmarked=trueにして、v-if, v-elseでthis.isBookmarkedによって、表示するアイコン変えられるようにbookmarkを追加したときに、dataを変更すればいいのかと思い以下のようにしましたが、全ての投稿がtrueになってしまっております・・
163
-
164
- ```
165
- <img :src="bookmark" alt="ブックマーク" class="bookmark-icon" @click="deleteBookmark" v-if="this.isBookmarked = true"/>
166
- <img :src="bookmarked" alt="ブックマーク" class="bookmark-icon" @click="saveBookmark" v-else />
167
- ```
168
-
169
- ```
170
- data() {
171
- return {
172
- bookmark: require("../assets/ブックマーク保存.jpg"),
173
- bookmarked: require("../assets/ブックマーク未保存.jpg"),
174
- isBookmarked: false,
175
- userDatas: [],
176
- preview: require("../assets/デフォルト画像.jpg")
177
- };
178
- },
179
- ```
180
-
181
- ```ここに言語を入力
182
- saveBookmark() {
183
- const id = firebase
184
- .firestore()
185
- .collection("users")
186
- .doc(this.$route.params.uid)
187
- .collection("bookmarks")
188
- .doc().id;
189
-
190
- firebase
191
- .firestore()
192
- .collection("users") //「users」コレクションを参照
193
- .doc(this.$route.params.uid) //対象ページのユーザーを参照
194
- .collection("bookmarks") //「bookmarks」サブコレクションを参照
195
- .doc(id) //自動生成されたドキュメントIDを参照
196
- .set({
197
- postId: this.list.id, //「postId」に投稿データである「this.list.id」を代入。
198
- time: firebase.firestore.FieldValue.serverTimestamp()
199
- })
200
- .then(() => {
201
- this.$swal("ブックマークに追加しました。", {
202
- icon: "success"
203
- });
204
116
  this.isBookmarked = true;
205
117
  })
206
118
  .catch(() => {
@@ -209,9 +121,7 @@
209
121
  });
210
122
  });
211
123
  },
212
- ```
213
124
 
214
- ```
215
125
  deleteBookmark() {
216
126
  firebase
217
127
  .firestore()
@@ -240,4 +150,5 @@
240
150
  });
241
151
  });
242
152
  },
153
+ </script>
243
154
  ```

2

追記1追加

2021/06/24 14:30

投稿

TMTN
TMTN

スコア53

title CHANGED
File without changes
body CHANGED
@@ -155,4 +155,89 @@
155
155
  });
156
156
  },
157
157
  </script>
158
+ ```
159
+
160
+ #追記1
161
+
162
+ 「saveBookmark」したときに、this.isBookmarked=trueにして、v-if, v-elseでthis.isBookmarkedによって、表示するアイコン変えられるようにbookmarkを追加したときに、dataを変更すればいいのかと思い以下のようにしましたが、全ての投稿がtrueになってしまっております・・
163
+
164
+ ```
165
+ <img :src="bookmark" alt="ブックマーク" class="bookmark-icon" @click="deleteBookmark" v-if="this.isBookmarked = true"/>
166
+ <img :src="bookmarked" alt="ブックマーク" class="bookmark-icon" @click="saveBookmark" v-else />
167
+ ```
168
+
169
+ ```
170
+ data() {
171
+ return {
172
+ bookmark: require("../assets/ブックマーク保存.jpg"),
173
+ bookmarked: require("../assets/ブックマーク未保存.jpg"),
174
+ isBookmarked: false,
175
+ userDatas: [],
176
+ preview: require("../assets/デフォルト画像.jpg")
177
+ };
178
+ },
179
+ ```
180
+
181
+ ```ここに言語を入力
182
+ saveBookmark() {
183
+ const id = firebase
184
+ .firestore()
185
+ .collection("users")
186
+ .doc(this.$route.params.uid)
187
+ .collection("bookmarks")
188
+ .doc().id;
189
+
190
+ firebase
191
+ .firestore()
192
+ .collection("users") //「users」コレクションを参照
193
+ .doc(this.$route.params.uid) //対象ページのユーザーを参照
194
+ .collection("bookmarks") //「bookmarks」サブコレクションを参照
195
+ .doc(id) //自動生成されたドキュメントIDを参照
196
+ .set({
197
+ postId: this.list.id, //「postId」に投稿データである「this.list.id」を代入。
198
+ time: firebase.firestore.FieldValue.serverTimestamp()
199
+ })
200
+ .then(() => {
201
+ this.$swal("ブックマークに追加しました。", {
202
+ icon: "success"
203
+ });
204
+ this.isBookmarked = true;
205
+ })
206
+ .catch(() => {
207
+ this.$swal("ブックマークを追加出来ません。", {
208
+ icon: "error"
209
+ });
210
+ });
211
+ },
212
+ ```
213
+
214
+ ```
215
+ deleteBookmark() {
216
+ firebase
217
+ .firestore()
218
+ .collection("users")
219
+ .doc(this.$route.params.uid)
220
+ .collection("bookmarks")
221
+ .where("postId", "==", this.list.id)
222
+ //postIdをフィルタリングして投稿idであるthis.list.idと合致するもののみを参照
223
+ .get()
224
+ .then(snapshot => {
225
+ snapshot.forEach(doc => {
226
+ //forEachで全てのドキュメントに対して
227
+ doc.ref //ドキュメントの数だけrefを参照して
228
+ .delete() //削除を実行
229
+ .then(() => {
230
+ this.$swal("ブックマークを取り消ししました。", {
231
+ icon: "success"
232
+ });
233
+ this.isBookmarked = false;
234
+ })
235
+ .catch(() => {
236
+ this.$swal("ブックマークを取り消し出来ません。", {
237
+ icon: "error"
238
+ });
239
+ });
240
+ });
241
+ });
242
+ },
158
243
  ```

1

内容変更

2021/06/23 06:21

投稿

TMTN
TMTN

スコア53

title CHANGED
File without changes
body CHANGED
@@ -9,14 +9,14 @@
9
9
 
10
10
  ```ここに言語を入力
11
11
  <img
12
- src="../assets/ブックマーク保存.jpg"
12
+ :src="isBookmark"
13
13
  alt="ブックマーク"
14
14
  class="bookmark-icon"
15
15
  @click="deleteBookmark"
16
16
  v-if="list.isBookmarked"
17
17
  />
18
18
  <img
19
- src="../assets/ブックマーク未保存.jpg"
19
+ :src="isBookmarked"
20
20
  alt="ブックマーク"
21
21
  class="bookmark-icon"
22
22
  @click="saveBookmark"
@@ -54,14 +54,14 @@
54
54
  <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
55
55
  <!-- 「list.id」propsで親コンポーネントから取得したidを取得。-->
56
56
  <img
57
- src="../assets/ブックマーク保存.jpg"
57
+ :src="isBookmark"
58
58
  alt="ブックマーク"
59
59
  class="bookmark-icon"
60
60
  @click="deleteBookmark"
61
61
  v-if="list.isBookmarked"
62
62
  />
63
63
  <img
64
- src="../assets/ブックマーク未保存.jpg"
64
+ :src="isBookmarked"
65
65
  alt="ブックマーク"
66
66
  class="bookmark-icon"
67
67
  @click="saveBookmark"
@@ -79,6 +79,8 @@
79
79
  export default {
80
80
  data() {
81
81
  return {
82
+ isBookmark:require("../assets/ブックマーク保存.jpg"),
83
+ isBookmarked:require("../assets/ブックマーク未保存.jpg"),
82
84
  bookmarkId: "",
83
85
  userDatas: [],
84
86
  preview: require("../assets/デフォルト画像.jpg")