質問編集履歴

10

内容修正

2021/06/09 04:23

投稿

TMTN
TMTN

スコア53

test CHANGED
@@ -1 +1 @@
1
- ブックマークボタンを奇数回押下でボタンを色付きのアイコン偶数回押下でボタンを色無しのアイコンと切り替えたい
1
+ ブックマーク保存ボタンを押下されたら「色付きのアイコン、 ブックマーク削除ボタンを押下されたら「色無しのアイコンと切り替えたい
test CHANGED
@@ -1,34 +1,400 @@
1
- #ブックマークボタンを奇数回押下でボタンを色付きのアイコン偶数回押下でボタンを色無しのアイコンと切り替えたい
1
+ #ブックマーク保存ボタンを押下されたら「色付きのアイコン、 ブックマーク削除ボタンを押下されたら「色無しのアイコンと切り替えたい
2
-
3
-
4
-
5
- 現状、savePost()というメソッドを用意し、
2
+
6
-
3
+
4
+
7
- 奇数回ボタンを押下された場合、usersコレクションのサブコレクションbookmarksへ保存、
5
+ 現状、saveBookmark()というボタンを用意し、ボタンを押下されたusersコレクションのサブコレクションbookmarksへ保存、
8
-
6
+
9
- 偶数回ボタンを押下された場合は、usersコレクションのサブコレクションbookmarksから削除
7
+ 、deleteBookmark()というボタンを押下されたusersコレクションのサブコレクションbookmarksから削除
10
-
8
+
11
- されるようにコードを書いてます。
9
+ されるようにロジックとしは作れおります。
12
10
 
13
11
 
14
12
 
15
13
  ```ここに言語を入力
16
14
 
15
+ saveBookmark() {
16
+
17
+ const ref = firebase
18
+
19
+ .firestore()
20
+
21
+ .collection("users")
22
+
23
+ .doc(this.$route.params.uid)
24
+
25
+ .collection("bookmarks")
26
+
27
+ .doc();
28
+
29
+ const id = ref.id;
30
+
31
+ firebase
32
+
33
+ .firestore()
34
+
35
+ .collection("users")
36
+
37
+ .doc(this.$route.params.uid)
38
+
39
+ .collection("bookmarks")
40
+
41
+ .doc(id)
42
+
43
+ .set({
44
+
45
+ bookmarkId: id,
46
+
47
+ ...this.list,
48
+
49
+ time: firebase.firestore.FieldValue.serverTimestamp()
50
+
51
+ })
52
+
53
+ .then(() => {
54
+
55
+ this.$swal("ブックマークに追加しました。", {
56
+
57
+ icon: "success"
58
+
59
+ });
60
+
61
+ })
62
+
63
+ .catch(() => {
64
+
65
+ this.$swal("ブックマークを追加出来ません。", {
66
+
67
+ icon: "error"
68
+
69
+ });
70
+
71
+ });
72
+
73
+ },
74
+
75
+ deleteBookmark() {
76
+
77
+ firebase
78
+
79
+ .firestore()
80
+
81
+ .collection("users")
82
+
83
+ .doc(this.$route.params.uid)
84
+
85
+ .collection("bookmarks")
86
+
87
+ .doc(this.list.bookmarkId)
88
+
89
+ .delete()
90
+
91
+ .then(() => {
92
+
93
+ this.$swal("ブックマークを取り消ししました。", {
94
+
95
+ icon: "success"
96
+
97
+ });
98
+
99
+ this.$router.go({
100
+
101
+ path: `/bookmark/${this.$route.params.uid}`,
102
+
103
+ force: true
104
+
105
+ });
106
+
107
+ })
108
+
109
+ .catch(() => {
110
+
111
+ this.$swal("ブックマークを取り消し出来ません。", {
112
+
113
+ icon: "error"
114
+
115
+ });
116
+
117
+ });
118
+
119
+ },
120
+
121
+
122
+
123
+ ```
124
+
125
+
126
+
127
+
128
+
129
+ ![イメージ説明](f737c04686c56de289097efb866aa424.png)
130
+
131
+
132
+
133
+
134
+
135
+ 分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
136
+
137
+ 対象の1つの投稿に対してボタンが(色付き ⇔ 色無し)切り替わるのではなく、全ての投稿のボタンが(色付き ⇔ 色無し)切り替わってしまうと思います。
138
+
139
+
140
+
141
+ 対象の投稿のみにブックマークのボタンを「色付き ⇔ 色無し」切り替える為にはどのようにしたらよいのでしょうか・・
142
+
143
+
144
+
145
+ 分かる方いらっしゃいましたらお力添えを頂きたいです。
146
+
147
+
148
+
149
+ よろしくお願いいたします。
150
+
151
+
152
+
153
+ #bookmark.vue(親コンポーネント)
154
+
155
+
156
+
157
+ ```html
158
+
159
+ <template>
160
+
161
+ <div>
162
+
163
+ <Header />
164
+
165
+ <div class="bookmarkList flex">
166
+
167
+ <h3 class="bookmarkList-title flex">{{ profileData.name }} さんのブックマーク一覧</h3>
168
+
169
+ <hr class="separate" />
170
+
171
+ <div class="bookmarkList-posts">
172
+
173
+ <paginate
174
+
175
+ name="paginate-bookmarkList"
176
+
177
+ tag="ol"
178
+
179
+ :list="bookmarkList"
180
+
181
+ :per="3"
182
+
183
+ v-if="bookmarkList.length !== 0"
184
+
185
+ >
186
+
187
+ <List v-for="(list) in paginated('paginate-bookmarkList')" :list="list" :key="list.id" />
188
+
189
+ </paginate>
190
+
191
+
192
+
193
+ <div v-else class="nothing flex">ブックマークされた投稿はありません</div>
194
+
195
+ <paginate-links
196
+
197
+ for="paginate-bookmarkList"
198
+
199
+ class="pagination flex"
200
+
201
+ :show-step-links="true"
202
+
203
+ :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'"
204
+
205
+ ></paginate-links>
206
+
207
+ </div>
208
+
209
+ </div>
210
+
211
+ </div>
212
+
213
+ </template>
214
+
215
+ ```
216
+
217
+
218
+
219
+ ```js
220
+
17
221
  export default {
18
222
 
19
223
  data() {
20
224
 
21
225
  return {
22
226
 
227
+ bookmarkData: {},
228
+
229
+ paginate: ["paginate-bookmarkList"],
230
+
231
+ bookmarkList: []
232
+
233
+ };
234
+
235
+ },
236
+
237
+ components: {
238
+
239
+ Header,
240
+
241
+ List
242
+
243
+ },
244
+
245
+ created() {
246
+
247
+ firebase
248
+
249
+ .firestore()
250
+
251
+ .collection("users")
252
+
253
+ .doc(this.$route.params.uid)
254
+
255
+ .get()
256
+
257
+ .then(snapshot => {
258
+
259
+ this.profileData = snapshot.data();
260
+
261
+ });
262
+
263
+ firebase
264
+
265
+ .firestore()
266
+
267
+ .collection("users")
268
+
269
+ .doc(this.$route.params.uid)
270
+
271
+ .collection("bookmarks")
272
+
273
+ .orderBy("time", "desc")
274
+
275
+ .get()
276
+
277
+ .then(snapshot => {
278
+
279
+ snapshot.forEach(doc => {
280
+
281
+ this.bookmarkList.push(doc.data());
282
+
283
+ });
284
+
285
+ });
286
+
287
+ }
288
+
289
+ };
290
+
291
+ </script>
292
+
293
+ ```
294
+
295
+
296
+
297
+ #list.vue(子コンポーネント)
298
+
299
+
300
+
301
+ ```html
302
+
303
+
304
+
305
+ <template>
306
+
307
+ <div class="list">
308
+
309
+ <div class="face face1 flex">
310
+
311
+ <div class="content">
312
+
313
+ <img
314
+
315
+ class="profile-icon"
316
+
317
+ width="50"
318
+
319
+ height="50"
320
+
321
+ :src="
322
+
323
+ returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
324
+
325
+ "
326
+
327
+ />
328
+
329
+ <h3>{{ list.title }}</h3>
330
+
331
+ </div>
332
+
333
+ </div>
334
+
335
+ <div class="face face2 flex">
336
+
337
+ <div class="content flex">
338
+
339
+ <button class="hide-btn" @click="deletePost">×</button>
340
+
341
+ <p>{{ list.description }}</p>
342
+
343
+ <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
344
+
345
+ <!-- 「list.id」propsで親コンポーネントから取得したidを取得。-->
346
+
347
+ <img
348
+
349
+ src="../assets/ブックマーク.jpg"
350
+
351
+ alt="ブックマーク"
352
+
353
+ class="bookmark-icon"
354
+
355
+ @click="saveBookmark();deleteBookmark();"
356
+
357
+ />
358
+
359
+ <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
360
+
361
+ </div>
362
+
363
+ </div>
364
+
365
+ </div>
366
+
367
+ </template>
368
+
369
+ ```
370
+
371
+
372
+
373
+ ```ここに言語を入力
374
+
375
+ export default {
376
+
377
+ data() {
378
+
379
+ return {
380
+
23
381
  num: 0,
24
382
 
25
383
  },
26
384
 
27
385
 
28
386
 
387
+ props: {
388
+
389
+ list: {
390
+
391
+ type: Object
392
+
393
+ },
394
+
29
- savePost() {
395
+ saveBookmark() {
30
-
396
+
31
- const id = firebase
397
+ const ref = firebase
32
398
 
33
399
  .firestore()
34
400
 
@@ -38,472 +404,100 @@
38
404
 
39
405
  .collection("bookmarks")
40
406
 
41
- .doc().id;
42
-
43
-
44
-
45
- ++this.num;
46
-
47
-
48
-
49
- if (this.num % 2 == 0) {
50
-
51
- firebase
52
-
53
- .firestore()
54
-
55
- .collection("users")
56
-
57
- .doc(this.$route.params.uid)
58
-
59
- .collection("bookmarks")
60
-
61
- .doc(id)
62
-
63
- .delete()
64
-
65
- .then(() => {
66
-
67
- this.$swal("ブックマークを取り消ししました。", {
68
-
69
- icon: "success"
70
-
71
- });
72
-
73
- })
74
-
75
- .catch(() => {
76
-
77
- this.$swal("ブックマークを取り消し出来ません。", {
78
-
79
- icon: "error"
80
-
81
- });
82
-
83
- });
84
-
85
- console.log(id);
86
-
87
- } else {
88
-
89
- firebase
90
-
91
- .firestore()
92
-
93
- .collection("users")
94
-
95
- .doc(this.$route.params.uid)
96
-
97
- .collection("bookmarks")
98
-
99
- .add({
100
-
101
- id: id,
102
-
103
- uid: this.$route.params.uid,
104
-
105
- list: this.list,
106
-
107
- time: firebase.firestore.FieldValue.serverTimestamp()
108
-
109
- })
110
-
111
- .then(() => {
112
-
113
- this.$swal("ブックマークに追加しました。", {
114
-
115
- icon: "success"
116
-
117
- });
118
-
119
- })
120
-
121
- .catch(() => {
122
-
123
- this.$swal("ブックマークを追加出来ません。", {
124
-
125
- icon: "error"
126
-
127
- });
128
-
129
- });
130
-
131
- }
132
-
133
- },
407
+ .doc();
408
+
409
+ const id = ref.id;
410
+
411
+ firebase
412
+
413
+ .firestore()
414
+
415
+ .collection("users")
416
+
417
+ .doc(this.$route.params.uid)
418
+
419
+ .collection("bookmarks")
420
+
421
+ .doc(id)
422
+
423
+ .set({
424
+
425
+ bookmarkId: id,
426
+
427
+ ...this.list,
428
+
429
+ time: firebase.firestore.FieldValue.serverTimestamp()
430
+
431
+ })
432
+
433
+ .then(() => {
434
+
435
+ this.$swal("ブックマークに追加しました。", {
436
+
437
+ icon: "success"
438
+
439
+ });
440
+
441
+ })
442
+
443
+ .catch(() => {
444
+
445
+ this.$swal("ブックマークを追加出来ません。", {
446
+
447
+ icon: "error"
448
+
449
+ });
450
+
451
+ });
452
+
453
+ },
454
+
455
+ deleteBookmark() {
456
+
457
+ firebase
458
+
459
+ .firestore()
460
+
461
+ .collection("users")
462
+
463
+ .doc(this.$route.params.uid)
464
+
465
+ .collection("bookmarks")
466
+
467
+ .doc(this.list.bookmarkId)
468
+
469
+ .delete()
470
+
471
+ .then(() => {
472
+
473
+ this.$swal("ブックマークを取り消ししました。", {
474
+
475
+ icon: "success"
476
+
477
+ });
478
+
479
+ this.$router.go({
480
+
481
+ path: `/bookmark/${this.$route.params.uid}`,
482
+
483
+ force: true
484
+
485
+ });
486
+
487
+ })
488
+
489
+ .catch(() => {
490
+
491
+ this.$swal("ブックマークを取り消し出来ません。", {
492
+
493
+ icon: "error"
494
+
495
+ });
496
+
497
+ });
498
+
499
+ },
500
+
501
+
134
502
 
135
503
  ```
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
- そこで理想としては上記に対して奇数回ボタンが押下されたらボタンを色付きのアイコンを表示、
144
-
145
- 偶数回ボタンが押下されたらを色無しのアイコンを表示して切り替わるようにしたいです。
146
-
147
-
148
-
149
- ![イメージ説明](f737c04686c56de289097efb866aa424.png)
150
-
151
-
152
-
153
-
154
-
155
- 分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
156
-
157
- 対象の1つの投稿に対してボタンが(色付き ⇔ 色無し)切り替わるのではなく、全ての投稿のボタンが(色付き ⇔ 色無し)切り替わってしまうと思います。
158
-
159
-
160
-
161
- 対象の投稿のみにブックマークのボタンを「色付き ⇔ 色無し」切り替える為にはどのようにしたらよいのでしょうか・・
162
-
163
-
164
-
165
- 分かる方いらっしゃいましたらお力添えを頂きたいです。
166
-
167
-
168
-
169
- よろしくお願いいたします。
170
-
171
-
172
-
173
- #bookmark.vue(親コンポーネント)
174
-
175
-
176
-
177
- ```html
178
-
179
- <template>
180
-
181
- <div>
182
-
183
- <Header />
184
-
185
- <div class="bookmarkList flex">
186
-
187
- <h3 class="bookmarkList-title flex">{{ bookmarkData.name }} さんのブックマーク一覧</h3>
188
-
189
- <hr class="separate" />
190
-
191
- <div class="bookmarkList-posts">
192
-
193
- {{bookmarkList.list}}
194
-
195
- <paginate name="paginate-bookmarkList" tag="ol" :list="bookmarkList" :per="3">
196
-
197
-
198
-
199
- <List
200
-
201
- v-for="(list, index) in paginated('paginate-bookmarkList')"
202
-
203
- :bookmark="bookmark"
204
-
205
- :key="list.id"
206
-
207
- />
208
-
209
- </paginate>
210
-
211
- <paginate-links
212
-
213
- for="paginate-bookmarkList"
214
-
215
- class="pagination flex"
216
-
217
- :show-step-links="true"
218
-
219
- :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'"
220
-
221
- ></paginate-links>
222
-
223
- </div>
224
-
225
- </div>
226
-
227
- </div>
228
-
229
- </template>
230
-
231
- ```
232
-
233
-
234
-
235
- ```js
236
-
237
- export default {
238
-
239
- data() {
240
-
241
- return {
242
-
243
- bookmarkData: {},
244
-
245
- paginate: ["paginate-bookmarkList"],
246
-
247
- bookmarkList: []
248
-
249
- };
250
-
251
- },
252
-
253
- components: {
254
-
255
- Header,
256
-
257
- List
258
-
259
- },
260
-
261
- methods: {},
262
-
263
- created() {
264
-
265
- firebase
266
-
267
- .firestore()
268
-
269
- .collection("users")
270
-
271
- .doc(this.$route.params.uid)
272
-
273
- .get()
274
-
275
- .then(snapshot => {
276
-
277
- this.bookmarkData = snapshot.data();
278
-
279
- });
280
-
281
-
282
-
283
- firebase
284
-
285
- .firestore()
286
-
287
- .collection("users")
288
-
289
- .doc(this.$route.params.uid)
290
-
291
- .collection("bookmarks")
292
-
293
- .orderBy("time", "desc")
294
-
295
- .get()
296
-
297
- .then((snapshot) => {
298
-
299
- snapshot.forEach((doc) => {
300
-
301
- this.bookmarkList.push(...doc.data(), id: doc.id);
302
-
303
- });
304
-
305
- });
306
-
307
- }
308
-
309
- };
310
-
311
- </script>
312
-
313
- ```
314
-
315
-
316
-
317
- #list.vue(子コンポーネント)
318
-
319
-
320
-
321
- ```html
322
-
323
- <template>
324
-
325
- <div class="card">
326
-
327
- <div class="face face1 flex">
328
-
329
- <div class="content">
330
-
331
- <img
332
-
333
- class="profile-icon"
334
-
335
- width="50"
336
-
337
- height="50"
338
-
339
- :src="
340
-
341
- returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
342
-
343
- "
344
-
345
- />
346
-
347
- <h3>{{ list.title }}</h3>
348
-
349
- </div>
350
-
351
- </div>
352
-
353
- <div class="face face2 flex">
354
-
355
- <div class="content flex">
356
-
357
- <button class="hide-btn" @click="deletePost">×</button>
358
-
359
- <p>{{ list.description }}</p>
360
-
361
- <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
362
-
363
- <img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
364
-
365
- <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
366
-
367
- </div>
368
-
369
- </div>
370
-
371
- </div>
372
-
373
- </template>
374
-
375
- ```
376
-
377
-
378
-
379
- ```ここに言語を入力
380
-
381
- export default {
382
-
383
- data() {
384
-
385
- return {
386
-
387
- num: 0,
388
-
389
- },
390
-
391
-
392
-
393
- props: {
394
-
395
- list: {
396
-
397
- type: Object
398
-
399
- },
400
-
401
-
402
-
403
- savePost() {
404
-
405
- const id = firebase
406
-
407
- .firestore()
408
-
409
- .collection("users")
410
-
411
- .doc(this.$route.params.uid)
412
-
413
- .collection("bookmarks")
414
-
415
- .doc().id;
416
-
417
-
418
-
419
- ++this.num;
420
-
421
-
422
-
423
- if (this.num % 2 == 0) {
424
-
425
- firebase
426
-
427
- .firestore()
428
-
429
- .collection("users")
430
-
431
- .doc(this.$route.params.uid)
432
-
433
- .collection("bookmarks")
434
-
435
- .doc(id)
436
-
437
- .delete()
438
-
439
- .then(() => {
440
-
441
- this.$swal("ブックマークを取り消ししました。", {
442
-
443
- icon: "success"
444
-
445
- });
446
-
447
- })
448
-
449
- .catch(() => {
450
-
451
- this.$swal("ブックマークを取り消し出来ません。", {
452
-
453
- icon: "error"
454
-
455
- });
456
-
457
- });
458
-
459
- console.log(id);
460
-
461
- } else {
462
-
463
- firebase
464
-
465
- .firestore()
466
-
467
- .collection("users")
468
-
469
- .doc(this.$route.params.uid)
470
-
471
- .collection("bookmarks")
472
-
473
- .add({
474
-
475
- id: id,
476
-
477
- uid: this.$route.params.uid,
478
-
479
- list: this.list,
480
-
481
- time: firebase.firestore.FieldValue.serverTimestamp()
482
-
483
- })
484
-
485
- .then(() => {
486
-
487
- this.$swal("ブックマークに追加しました。", {
488
-
489
- icon: "success"
490
-
491
- });
492
-
493
- })
494
-
495
- .catch(() => {
496
-
497
- this.$swal("ブックマークを追加出来ません。", {
498
-
499
- icon: "error"
500
-
501
- });
502
-
503
- });
504
-
505
- }
506
-
507
- },
508
-
509
- ```

9

内容変更

2021/06/09 04:23

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -12,15 +12,23 @@
12
12
 
13
13
 
14
14
 
15
- しかし、以下でまずnumが常に1の値しか返ってこないです・・
16
-
17
-
18
-
19
15
  ```ここに言語を入力
20
16
 
17
+ export default {
18
+
19
+ data() {
20
+
21
- methods: {
21
+ return {
22
+
22
-
23
+ num: 0,
24
+
25
+ },
26
+
27
+
28
+
29
+ savePost() {
30
+
23
- const id = firebase
31
+ const id = firebase
24
32
 
25
33
  .firestore()
26
34
 
@@ -30,466 +38,472 @@
30
38
 
31
39
  .collection("bookmarks")
32
40
 
33
- .doc().id;
34
-
35
-
36
-
37
- savePost() {
38
-
39
- const num = 0;
40
-
41
- num++;
42
-
43
-
44
-
45
- if (num % 2 == 0) {
46
-
47
- firebase
48
-
49
- .firestore()
50
-
51
- .collection("users")
52
-
53
- .doc(this.$route.params.uid)
54
-
55
- .collection("bookmarks")
56
-
57
- .doc(bookmark.id)
58
-
59
- .delete()
60
-
61
- .then(() => {
62
-
63
- this.$swal("ブックマークを取り消ししました。", {
64
-
65
- icon: "success"
66
-
67
- });
68
-
69
- })
70
-
71
- .catch(() => {
72
-
73
- this.$swal("ブックマークを取り消し出来ません。", {
74
-
75
- icon: "error"
76
-
77
- });
78
-
79
- });
80
-
81
- } else {
82
-
83
- firebase
84
-
85
- .firestore()
86
-
87
- .collection("users")
88
-
89
- .doc(this.$route.params.uid)
90
-
91
- .collection("bookmarks")
92
-
93
- .add({
94
-
95
- id:id,
96
-
97
- uid: this.$route.params.uid,
98
-
99
- list: this.list,
100
-
101
- time: firebase.firestore.FieldValue.serverTimestamp(),
102
-
103
- })
104
-
105
- .then(() => {
106
-
107
- this.$swal("ブックマークに追加しました。", {
108
-
109
- icon: "success"
110
-
111
- });
112
-
113
- })
114
-
115
- .catch(() => {
116
-
117
- this.$swal("ブックマークを追加出来ません。", {
118
-
119
- icon: "error"
120
-
121
- });
122
-
123
- });
124
-
125
- }
126
-
127
- }
41
+ .doc().id;
42
+
43
+
44
+
45
+ ++this.num;
46
+
47
+
48
+
49
+ if (this.num % 2 == 0) {
50
+
51
+ firebase
52
+
53
+ .firestore()
54
+
55
+ .collection("users")
56
+
57
+ .doc(this.$route.params.uid)
58
+
59
+ .collection("bookmarks")
60
+
61
+ .doc(id)
62
+
63
+ .delete()
64
+
65
+ .then(() => {
66
+
67
+ this.$swal("ブックマークを取り消ししました。", {
68
+
69
+ icon: "success"
70
+
71
+ });
72
+
73
+ })
74
+
75
+ .catch(() => {
76
+
77
+ this.$swal("ブックマークを取り消し出来ません。", {
78
+
79
+ icon: "error"
80
+
81
+ });
82
+
83
+ });
84
+
85
+ console.log(id);
86
+
87
+ } else {
88
+
89
+ firebase
90
+
91
+ .firestore()
92
+
93
+ .collection("users")
94
+
95
+ .doc(this.$route.params.uid)
96
+
97
+ .collection("bookmarks")
98
+
99
+ .add({
100
+
101
+ id: id,
102
+
103
+ uid: this.$route.params.uid,
104
+
105
+ list: this.list,
106
+
107
+ time: firebase.firestore.FieldValue.serverTimestamp()
108
+
109
+ })
110
+
111
+ .then(() => {
112
+
113
+ this.$swal("ブックマークに追加しました。", {
114
+
115
+ icon: "success"
116
+
117
+ });
118
+
119
+ })
120
+
121
+ .catch(() => {
122
+
123
+ this.$swal("ブックマークを追加出来ません。", {
124
+
125
+ icon: "error"
126
+
127
+ });
128
+
129
+ });
130
+
131
+ }
132
+
133
+ },
134
+
135
+ ```
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+ そこで理想としては上記に対して奇数回ボタンが押下されたらボタンを色付きのアイコンを表示、
144
+
145
+ 偶数回ボタンが押下されたらを色無しのアイコンを表示して切り替わるようにしたいです。
146
+
147
+
148
+
149
+ ![イメージ説明](f737c04686c56de289097efb866aa424.png)
150
+
151
+
152
+
153
+
154
+
155
+ 分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
156
+
157
+ 対象の1つの投稿に対してボタンが(色付き ⇔ 色無し)切り替わるのではなく、全ての投稿のボタンが(色付き ⇔ 色無し)切り替わってしまうと思います。
158
+
159
+
160
+
161
+ 対象の投稿のみにブックマークのボタンを「色付き ⇔ 色無し」切り替える為にはどのようにしたらよいのでしょうか・・
162
+
163
+
164
+
165
+ 分かる方いらっしゃいましたらお力添えを頂きたいです。
166
+
167
+
168
+
169
+ よろしくお願いいたします。
170
+
171
+
172
+
173
+ #bookmark.vue(親コンポーネント)
174
+
175
+
176
+
177
+ ```html
178
+
179
+ <template>
180
+
181
+ <div>
182
+
183
+ <Header />
184
+
185
+ <div class="bookmarkList flex">
186
+
187
+ <h3 class="bookmarkList-title flex">{{ bookmarkData.name }} さんのブックマーク一覧</h3>
188
+
189
+ <hr class="separate" />
190
+
191
+ <div class="bookmarkList-posts">
192
+
193
+ {{bookmarkList.list}}
194
+
195
+ <paginate name="paginate-bookmarkList" tag="ol" :list="bookmarkList" :per="3">
196
+
197
+
198
+
199
+ <List
200
+
201
+ v-for="(list, index) in paginated('paginate-bookmarkList')"
202
+
203
+ :bookmark="bookmark"
204
+
205
+ :key="list.id"
206
+
207
+ />
208
+
209
+ </paginate>
210
+
211
+ <paginate-links
212
+
213
+ for="paginate-bookmarkList"
214
+
215
+ class="pagination flex"
216
+
217
+ :show-step-links="true"
218
+
219
+ :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'"
220
+
221
+ ></paginate-links>
222
+
223
+ </div>
224
+
225
+ </div>
226
+
227
+ </div>
228
+
229
+ </template>
230
+
231
+ ```
232
+
233
+
234
+
235
+ ```js
236
+
237
+ export default {
238
+
239
+ data() {
240
+
241
+ return {
242
+
243
+ bookmarkData: {},
244
+
245
+ paginate: ["paginate-bookmarkList"],
246
+
247
+ bookmarkList: []
248
+
249
+ };
250
+
251
+ },
252
+
253
+ components: {
254
+
255
+ Header,
256
+
257
+ List
258
+
259
+ },
260
+
261
+ methods: {},
262
+
263
+ created() {
264
+
265
+ firebase
266
+
267
+ .firestore()
268
+
269
+ .collection("users")
270
+
271
+ .doc(this.$route.params.uid)
272
+
273
+ .get()
274
+
275
+ .then(snapshot => {
276
+
277
+ this.bookmarkData = snapshot.data();
278
+
279
+ });
280
+
281
+
282
+
283
+ firebase
284
+
285
+ .firestore()
286
+
287
+ .collection("users")
288
+
289
+ .doc(this.$route.params.uid)
290
+
291
+ .collection("bookmarks")
292
+
293
+ .orderBy("time", "desc")
294
+
295
+ .get()
296
+
297
+ .then((snapshot) => {
298
+
299
+ snapshot.forEach((doc) => {
300
+
301
+ this.bookmarkList.push(...doc.data(), id: doc.id);
302
+
303
+ });
304
+
305
+ });
306
+
307
+ }
308
+
309
+ };
310
+
311
+ </script>
312
+
313
+ ```
314
+
315
+
316
+
317
+ #list.vue(子コンポーネント)
318
+
319
+
320
+
321
+ ```html
322
+
323
+ <template>
324
+
325
+ <div class="card">
326
+
327
+ <div class="face face1 flex">
328
+
329
+ <div class="content">
330
+
331
+ <img
332
+
333
+ class="profile-icon"
334
+
335
+ width="50"
336
+
337
+ height="50"
338
+
339
+ :src="
340
+
341
+ returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
342
+
343
+ "
344
+
345
+ />
346
+
347
+ <h3>{{ list.title }}</h3>
348
+
349
+ </div>
350
+
351
+ </div>
352
+
353
+ <div class="face face2 flex">
354
+
355
+ <div class="content flex">
356
+
357
+ <button class="hide-btn" @click="deletePost">×</button>
358
+
359
+ <p>{{ list.description }}</p>
360
+
361
+ <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
362
+
363
+ <img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
364
+
365
+ <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
366
+
367
+ </div>
368
+
369
+ </div>
370
+
371
+ </div>
372
+
373
+ </template>
374
+
375
+ ```
376
+
377
+
378
+
379
+ ```ここに言語を入力
380
+
381
+ export default {
382
+
383
+ data() {
384
+
385
+ return {
386
+
387
+ num: 0,
388
+
389
+ },
390
+
391
+
392
+
393
+ props: {
394
+
395
+ list: {
396
+
397
+ type: Object
128
398
 
129
399
  },
130
400
 
401
+
402
+
403
+ savePost() {
404
+
405
+ const id = firebase
406
+
407
+ .firestore()
408
+
409
+ .collection("users")
410
+
411
+ .doc(this.$route.params.uid)
412
+
413
+ .collection("bookmarks")
414
+
415
+ .doc().id;
416
+
417
+
418
+
419
+ ++this.num;
420
+
421
+
422
+
423
+ if (this.num % 2 == 0) {
424
+
425
+ firebase
426
+
427
+ .firestore()
428
+
429
+ .collection("users")
430
+
431
+ .doc(this.$route.params.uid)
432
+
433
+ .collection("bookmarks")
434
+
435
+ .doc(id)
436
+
437
+ .delete()
438
+
439
+ .then(() => {
440
+
441
+ this.$swal("ブックマークを取り消ししました。", {
442
+
443
+ icon: "success"
444
+
445
+ });
446
+
447
+ })
448
+
449
+ .catch(() => {
450
+
451
+ this.$swal("ブックマークを取り消し出来ません。", {
452
+
453
+ icon: "error"
454
+
455
+ });
456
+
457
+ });
458
+
459
+ console.log(id);
460
+
461
+ } else {
462
+
463
+ firebase
464
+
465
+ .firestore()
466
+
467
+ .collection("users")
468
+
469
+ .doc(this.$route.params.uid)
470
+
471
+ .collection("bookmarks")
472
+
473
+ .add({
474
+
475
+ id: id,
476
+
477
+ uid: this.$route.params.uid,
478
+
479
+ list: this.list,
480
+
481
+ time: firebase.firestore.FieldValue.serverTimestamp()
482
+
483
+ })
484
+
485
+ .then(() => {
486
+
487
+ this.$swal("ブックマークに追加しました。", {
488
+
489
+ icon: "success"
490
+
491
+ });
492
+
493
+ })
494
+
495
+ .catch(() => {
496
+
497
+ this.$swal("ブックマークを追加出来ません。", {
498
+
499
+ icon: "error"
500
+
501
+ });
502
+
503
+ });
504
+
505
+ }
506
+
507
+ },
508
+
131
509
  ```
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
- そこで理想としては上記に対して奇数回ボタンが押下されたらボタンを色付きのアイコンを表示、
140
-
141
- 偶数回ボタンが押下されたらを色無しのアイコンを表示して切り替わるようにしたいです。
142
-
143
-
144
-
145
- ![イメージ説明](f737c04686c56de289097efb866aa424.png)
146
-
147
-
148
-
149
-
150
-
151
- 分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
152
-
153
- 対象の1つの投稿に対してボタンが(色付き ⇔ 色無し)切り替わるのではなく、全ての投稿のボタンが(色付き ⇔ 色無し)切り替わってしまうと思います。
154
-
155
-
156
-
157
- 対象の投稿のみにブックマークのボタンを「色付き ⇔ 色無し」切り替える為にはどのようにしたらよいのでしょうか・・
158
-
159
-
160
-
161
- 分かる方いらっしゃいましたらお力添えを頂きたいです。
162
-
163
-
164
-
165
- よろしくお願いいたします。
166
-
167
-
168
-
169
- #bookmark.vue(親コンポーネント)
170
-
171
-
172
-
173
- ```html
174
-
175
- <template>
176
-
177
- <div>
178
-
179
- <Header />
180
-
181
- <div class="bookmarkList flex">
182
-
183
- <h3 class="bookmarkList-title flex">{{ bookmarkData.name }} さんのブックマーク一覧</h3>
184
-
185
- <hr class="separate" />
186
-
187
- <div class="bookmarkList-posts">
188
-
189
- {{bookmarkList.list}}
190
-
191
- <paginate name="paginate-bookmarkList" tag="ol" :list="bookmarkList" :per="3">
192
-
193
-
194
-
195
- <List
196
-
197
- v-for="(list, index) in paginated('paginate-bookmarkList')"
198
-
199
- :bookmark="bookmark"
200
-
201
- :key="list.id"
202
-
203
- />
204
-
205
- </paginate>
206
-
207
- <paginate-links
208
-
209
- for="paginate-bookmarkList"
210
-
211
- class="pagination flex"
212
-
213
- :show-step-links="true"
214
-
215
- :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'"
216
-
217
- ></paginate-links>
218
-
219
- </div>
220
-
221
- </div>
222
-
223
- </div>
224
-
225
- </template>
226
-
227
- ```
228
-
229
-
230
-
231
- ```js
232
-
233
- export default {
234
-
235
- data() {
236
-
237
- return {
238
-
239
- bookmarkData: {},
240
-
241
- paginate: ["paginate-bookmarkList"],
242
-
243
- bookmarkList: []
244
-
245
- };
246
-
247
- },
248
-
249
- components: {
250
-
251
- Header,
252
-
253
- List
254
-
255
- },
256
-
257
- methods: {},
258
-
259
- created() {
260
-
261
- firebase
262
-
263
- .firestore()
264
-
265
- .collection("users")
266
-
267
- .doc(this.$route.params.uid)
268
-
269
- .get()
270
-
271
- .then(snapshot => {
272
-
273
- this.bookmarkData = snapshot.data();
274
-
275
- });
276
-
277
-
278
-
279
- firebase
280
-
281
- .firestore()
282
-
283
- .collection("users")
284
-
285
- .doc(this.$route.params.uid)
286
-
287
- .collection("bookmarks")
288
-
289
- .orderBy("time", "desc")
290
-
291
- .get()
292
-
293
- .then((snapshot) => {
294
-
295
- snapshot.forEach((doc) => {
296
-
297
- this.bookmarkList.push(...doc.data(), id: doc.id);
298
-
299
- });
300
-
301
- });
302
-
303
- }
304
-
305
- };
306
-
307
- </script>
308
-
309
- ```
310
-
311
-
312
-
313
- #list.vue(子コンポーネント)
314
-
315
-
316
-
317
- ```html
318
-
319
- <template>
320
-
321
- <div class="card">
322
-
323
- <div class="face face1 flex">
324
-
325
- <div class="content">
326
-
327
- <img
328
-
329
- class="profile-icon"
330
-
331
- width="50"
332
-
333
- height="50"
334
-
335
- :src="
336
-
337
- returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
338
-
339
- "
340
-
341
- />
342
-
343
- <h3>{{ list.title }}</h3>
344
-
345
- </div>
346
-
347
- </div>
348
-
349
- <div class="face face2 flex">
350
-
351
- <div class="content flex">
352
-
353
- <button class="hide-btn" @click="deletePost">×</button>
354
-
355
- <p>{{ list.description }}</p>
356
-
357
- <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
358
-
359
- <img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
360
-
361
- <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
362
-
363
- </div>
364
-
365
- </div>
366
-
367
- </div>
368
-
369
- </template>
370
-
371
- ```
372
-
373
-
374
-
375
- ```ここに言語を入力
376
-
377
- props: {
378
-
379
- list: {
380
-
381
- type: Object
382
-
383
- },
384
-
385
- methods: {
386
-
387
- const id = firebase
388
-
389
- .firestore()
390
-
391
- .collection("users")
392
-
393
- .doc(this.$route.params.uid)
394
-
395
- .collection("bookmarks")
396
-
397
- .doc().id;
398
-
399
-
400
-
401
- savePost() {
402
-
403
- const num = 0;
404
-
405
- num++;
406
-
407
-
408
-
409
- if (num % 2 == 0) {
410
-
411
- firebase
412
-
413
- .firestore()
414
-
415
- .collection("users")
416
-
417
- .doc(this.$route.params.uid)
418
-
419
- .collection("bookmarks")
420
-
421
- .doc(bookmark.id)
422
-
423
- .delete()
424
-
425
- .then(() => {
426
-
427
- this.$swal("ブックマークを取り消ししました。", {
428
-
429
- icon: "success"
430
-
431
- });
432
-
433
- })
434
-
435
- .catch(() => {
436
-
437
- this.$swal("ブックマークを取り消し出来ません。", {
438
-
439
- icon: "error"
440
-
441
- });
442
-
443
- });
444
-
445
- } else {
446
-
447
- firebase
448
-
449
- .firestore()
450
-
451
- .collection("users")
452
-
453
- .doc(this.$route.params.uid)
454
-
455
- .collection("bookmarks")
456
-
457
- .add({
458
-
459
- id:id,
460
-
461
- uid: this.$route.params.uid,
462
-
463
- list: this.list,
464
-
465
- time: firebase.firestore.FieldValue.serverTimestamp(),
466
-
467
- })
468
-
469
- .then(() => {
470
-
471
- this.$swal("ブックマークに追加しました。", {
472
-
473
- icon: "success"
474
-
475
- });
476
-
477
- })
478
-
479
- .catch(() => {
480
-
481
- this.$swal("ブックマークを追加出来ません。", {
482
-
483
- icon: "error"
484
-
485
- });
486
-
487
- });
488
-
489
- }
490
-
491
- }
492
-
493
- },
494
-
495
- ```

8

内容変更

2021/06/07 23:54

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,13 @@
2
2
 
3
3
 
4
4
 
5
+ 現状、savePost()というメソッドを用意し、
6
+
5
- 現状、savePost()というメソッドを用意し、奇数回ボタンを押下された場合、Firestoreにあるusersコレクションのサブコレクションbookmarksへ保存、
7
+ 奇数回ボタンを押下された場合、usersコレクションのサブコレクションbookmarksへ保存、
6
-
8
+
7
- 偶数回ボタンを押下された場合は、Firestoreにあるusersコレクションのサブコレクションbookmarksから削除されるようにコードを書いてみてます。
9
+ 偶数回ボタンを押下された場合は、usersコレクションのサブコレクションbookmarksから削除
10
+
11
+ されるようにコードを書いてみてます。
8
12
 
9
13
 
10
14
 

7

内容変更

2021/06/07 11:48

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -128,41 +128,185 @@
128
128
 
129
129
 
130
130
 
131
+
132
+
133
+
134
+
135
+ そこで理想としては上記に対して奇数回ボタンが押下されたらボタンを色付きのアイコンを表示、
136
+
137
+ 偶数回ボタンが押下されたらを色無しのアイコンを表示して切り替わるようにしたいです。
138
+
139
+
140
+
141
+ ![イメージ説明](f737c04686c56de289097efb866aa424.png)
142
+
143
+
144
+
145
+
146
+
147
+ 分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
148
+
149
+ 対象の1つの投稿に対してボタンが(色付き ⇔ 色無し)切り替わるのではなく、全ての投稿のボタンが(色付き ⇔ 色無し)切り替わってしまうと思います。
150
+
151
+
152
+
153
+ 対象の投稿のみにブックマークのボタンを「色付き ⇔ 色無し」切り替える為にはどのようにしたらよいのでしょうか・・
154
+
155
+
156
+
157
+ 分かる方いらっしゃいましたらお力添えを頂きたいです。
158
+
159
+
160
+
161
+ よろしくお願いいたします。
162
+
163
+
164
+
165
+ #bookmark.vue(親コンポーネント)
166
+
167
+
168
+
169
+ ```html
170
+
171
+ <template>
172
+
173
+ <div>
174
+
175
+ <Header />
176
+
177
+ <div class="bookmarkList flex">
178
+
179
+ <h3 class="bookmarkList-title flex">{{ bookmarkData.name }} さんのブックマーク一覧</h3>
180
+
181
+ <hr class="separate" />
182
+
183
+ <div class="bookmarkList-posts">
184
+
185
+ {{bookmarkList.list}}
186
+
187
+ <paginate name="paginate-bookmarkList" tag="ol" :list="bookmarkList" :per="3">
188
+
189
+
190
+
191
+ <List
192
+
193
+ v-for="(list, index) in paginated('paginate-bookmarkList')"
194
+
195
+ :bookmark="bookmark"
196
+
197
+ :key="list.id"
198
+
199
+ />
200
+
201
+ </paginate>
202
+
203
+ <paginate-links
204
+
205
+ for="paginate-bookmarkList"
206
+
207
+ class="pagination flex"
208
+
209
+ :show-step-links="true"
210
+
211
+ :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'"
212
+
213
+ ></paginate-links>
214
+
215
+ </div>
216
+
217
+ </div>
218
+
219
+ </div>
220
+
221
+ </template>
222
+
131
223
  ```
132
224
 
133
225
 
134
226
 
135
- そこで理想としては上記に対して奇数回ボタンが押下されたらボタンを色付きのアイコンを表示、
136
-
137
- 偶数回ボタンが押下されたらを色無しのアイコンを表示して切り替わるようにしたいです。
138
-
139
-
140
-
141
- ![イメージ説明](f737c04686c56de289097efb866aa424.png)
142
-
143
-
144
-
145
-
146
-
147
- 分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
148
-
149
- 対象の1つの投稿に対してボタンが(色付き 色無し)切り替わるのではなく、全ての投稿のボタンが(色付き 色無し)切り替わってしまうと思います。
150
-
151
-
152
-
153
- 対象の投稿のみにブックマークのボタンを「色付き 色無し」切り替える為にはどのようにしたらよいのでしょうか・・
154
-
155
-
156
-
157
- 分かる方いらっしゃいましたらお力添えを頂きたいです。
158
-
159
-
160
-
161
- よろしくお願いいたします。
162
-
163
-
164
-
165
- #bookmark.vue(親コンポーネント)
227
+ ```js
228
+
229
+ export default {
230
+
231
+ data() {
232
+
233
+ return {
234
+
235
+ bookmarkData: {},
236
+
237
+ paginate: ["paginate-bookmarkList"],
238
+
239
+ bookmarkList: []
240
+
241
+ };
242
+
243
+ },
244
+
245
+ components: {
246
+
247
+ Header,
248
+
249
+ List
250
+
251
+ },
252
+
253
+ methods: {},
254
+
255
+ created() {
256
+
257
+ firebase
258
+
259
+ .firestore()
260
+
261
+ .collection("users")
262
+
263
+ .doc(this.$route.params.uid)
264
+
265
+ .get()
266
+
267
+ .then(snapshot => {
268
+
269
+ this.bookmarkData = snapshot.data();
270
+
271
+ });
272
+
273
+
274
+
275
+ firebase
276
+
277
+ .firestore()
278
+
279
+ .collection("users")
280
+
281
+ .doc(this.$route.params.uid)
282
+
283
+ .collection("bookmarks")
284
+
285
+ .orderBy("time", "desc")
286
+
287
+ .get()
288
+
289
+ .then((snapshot) => {
290
+
291
+ snapshot.forEach((doc) => {
292
+
293
+ this.bookmarkList.push(...doc.data(), id: doc.id);
294
+
295
+ });
296
+
297
+ });
298
+
299
+ }
300
+
301
+ };
302
+
303
+ </script>
304
+
305
+ ```
306
+
307
+
308
+
309
+ #list.vue(子コンポーネント)
166
310
 
167
311
 
168
312
 
@@ -170,52 +314,52 @@
170
314
 
171
315
  <template>
172
316
 
173
- <div>
174
-
175
- <Header />
317
+ <div class="card">
176
-
318
+
177
- <div class="bookmarkList flex">
319
+ <div class="face face1 flex">
178
-
179
- <h3 class="bookmarkList-title flex">{{ bookmarkData.name }} さんのブックマーク一覧</h3>
320
+
180
-
181
- <hr class="separate" />
182
-
183
- <div class="bookmarkList-posts">
321
+ <div class="content">
184
-
185
- {{bookmarkList.list}}
322
+
186
-
187
- <paginate name="paginate-bookmarkList" tag="ol" :list="bookmarkList" :per="3">
188
-
189
-
190
-
191
- <List
323
+ <img
192
-
193
- v-for="(list, index) in paginated('paginate-bookmarkList')"
324
+
194
-
195
- :bookmark="bookmark"
325
+ class="profile-icon"
196
-
326
+
197
- :key="list.id"
327
+ width="50"
328
+
198
-
329
+ height="50"
330
+
331
+ :src="
332
+
333
+ returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
334
+
335
+ "
336
+
199
- />
337
+ />
200
-
201
- </paginate>
338
+
202
-
203
- <paginate-links
204
-
205
- for="paginate-bookmarkList"
206
-
207
- class="pagination flex"
208
-
209
- :show-step-links="true"
210
-
211
- :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'"
212
-
213
- ></paginate-links>
339
+ <h3>{{ list.title }}</h3>
214
340
 
215
341
  </div>
216
342
 
217
343
  </div>
218
344
 
345
+ <div class="face face2 flex">
346
+
347
+ <div class="content flex">
348
+
349
+ <button class="hide-btn" @click="deletePost">×</button>
350
+
351
+ <p>{{ list.description }}</p>
352
+
353
+ <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
354
+
355
+ <img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
356
+
357
+ <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
358
+
359
+ </div>
360
+
361
+ </div>
362
+
219
363
  </div>
220
364
 
221
365
  </template>
@@ -224,268 +368,124 @@
224
368
 
225
369
 
226
370
 
227
- ```js
228
-
229
- export default {
230
-
231
- data() {
232
-
233
- return {
234
-
235
- bookmarkData: {},
236
-
237
- paginate: ["paginate-bookmarkList"],
238
-
239
- bookmarkList: []
240
-
241
- };
242
-
243
- },
244
-
245
- components: {
246
-
247
- Header,
248
-
249
- List
250
-
251
- },
252
-
253
- methods: {},
254
-
255
- created() {
256
-
257
- firebase
258
-
259
- .firestore()
260
-
261
- .collection("users")
262
-
263
- .doc(this.$route.params.uid)
264
-
265
- .get()
266
-
267
- .then(snapshot => {
268
-
269
- this.bookmarkData = snapshot.data();
270
-
271
- });
272
-
273
-
274
-
275
- firebase
276
-
277
- .firestore()
278
-
279
- .collection("users")
280
-
281
- .doc(this.$route.params.uid)
282
-
283
- .collection("bookmarks")
284
-
285
- .orderBy("time", "desc")
286
-
287
- .get()
288
-
289
- .then((snapshot) => {
290
-
291
- snapshot.forEach((doc) => {
292
-
293
- this.bookmarkList.push(...doc.data(), id: doc.id);
294
-
295
- });
296
-
297
- });
298
-
299
- }
300
-
301
- };
302
-
303
- </script>
371
+ ```ここに言語を入力
372
+
373
+ props: {
374
+
375
+ list: {
376
+
377
+ type: Object
378
+
379
+ },
380
+
381
+ methods: {
382
+
383
+ const id = firebase
384
+
385
+ .firestore()
386
+
387
+ .collection("users")
388
+
389
+ .doc(this.$route.params.uid)
390
+
391
+ .collection("bookmarks")
392
+
393
+ .doc().id;
394
+
395
+
396
+
397
+ savePost() {
398
+
399
+ const num = 0;
400
+
401
+ num++;
402
+
403
+
404
+
405
+ if (num % 2 == 0) {
406
+
407
+ firebase
408
+
409
+ .firestore()
410
+
411
+ .collection("users")
412
+
413
+ .doc(this.$route.params.uid)
414
+
415
+ .collection("bookmarks")
416
+
417
+ .doc(bookmark.id)
418
+
419
+ .delete()
420
+
421
+ .then(() => {
422
+
423
+ this.$swal("ブックマークを取り消ししました。", {
424
+
425
+ icon: "success"
426
+
427
+ });
428
+
429
+ })
430
+
431
+ .catch(() => {
432
+
433
+ this.$swal("ブックマークを取り消し出来ません。", {
434
+
435
+ icon: "error"
436
+
437
+ });
438
+
439
+ });
440
+
441
+ } else {
442
+
443
+ firebase
444
+
445
+ .firestore()
446
+
447
+ .collection("users")
448
+
449
+ .doc(this.$route.params.uid)
450
+
451
+ .collection("bookmarks")
452
+
453
+ .add({
454
+
455
+ id:id,
456
+
457
+ uid: this.$route.params.uid,
458
+
459
+ list: this.list,
460
+
461
+ time: firebase.firestore.FieldValue.serverTimestamp(),
462
+
463
+ })
464
+
465
+ .then(() => {
466
+
467
+ this.$swal("ブックマークに追加しました。", {
468
+
469
+ icon: "success"
470
+
471
+ });
472
+
473
+ })
474
+
475
+ .catch(() => {
476
+
477
+ this.$swal("ブックマークを追加出来ません。", {
478
+
479
+ icon: "error"
480
+
481
+ });
482
+
483
+ });
484
+
485
+ }
486
+
487
+ }
488
+
489
+ },
304
490
 
305
491
  ```
306
-
307
-
308
-
309
- #list.vue(子コンポーネント)
310
-
311
-
312
-
313
- ```html
314
-
315
- <template>
316
-
317
- <div class="card">
318
-
319
- <div class="face face1 flex">
320
-
321
- <div class="content">
322
-
323
- <img
324
-
325
- class="profile-icon"
326
-
327
- width="50"
328
-
329
- height="50"
330
-
331
- :src="
332
-
333
- returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
334
-
335
- "
336
-
337
- />
338
-
339
- <h3>{{ list.title }}</h3>
340
-
341
- </div>
342
-
343
- </div>
344
-
345
- <div class="face face2 flex">
346
-
347
- <div class="content flex">
348
-
349
- <button class="hide-btn" @click="deletePost">×</button>
350
-
351
- <p>{{ list.description }}</p>
352
-
353
- <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
354
-
355
- <img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
356
-
357
- <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
358
-
359
- </div>
360
-
361
- </div>
362
-
363
- </div>
364
-
365
- </template>
366
-
367
- ```
368
-
369
-
370
-
371
- ```ここに言語を入力
372
-
373
- props: {
374
-
375
- list: {
376
-
377
- type: Object
378
-
379
- },
380
-
381
- methods: {
382
-
383
- const id = firebase
384
-
385
- .firestore()
386
-
387
- .collection("users")
388
-
389
- .doc(this.$route.params.uid)
390
-
391
- .collection("bookmarks")
392
-
393
- .doc().id;
394
-
395
-
396
-
397
- savePost() {
398
-
399
- const num = 0;
400
-
401
- num++;
402
-
403
-
404
-
405
- if (num % 2 == 0) {
406
-
407
- firebase
408
-
409
- .firestore()
410
-
411
- .collection("users")
412
-
413
- .doc(this.$route.params.uid)
414
-
415
- .collection("bookmarks")
416
-
417
- .doc(bookmark.id)
418
-
419
- .delete()
420
-
421
- .then(() => {
422
-
423
- this.$swal("ブックマークを取り消ししました。", {
424
-
425
- icon: "success"
426
-
427
- });
428
-
429
- })
430
-
431
- .catch(() => {
432
-
433
- this.$swal("ブックマークを取り消し出来ません。", {
434
-
435
- icon: "error"
436
-
437
- });
438
-
439
- });
440
-
441
- } else {
442
-
443
- firebase
444
-
445
- .firestore()
446
-
447
- .collection("users")
448
-
449
- .doc(this.$route.params.uid)
450
-
451
- .collection("bookmarks")
452
-
453
- .add({
454
-
455
- id:id,
456
-
457
- uid: this.$route.params.uid,
458
-
459
- list: this.list,
460
-
461
- time: firebase.firestore.FieldValue.serverTimestamp(),
462
-
463
- })
464
-
465
- .then(() => {
466
-
467
- this.$swal("ブックマークに追加しました。", {
468
-
469
- icon: "success"
470
-
471
- });
472
-
473
- })
474
-
475
- .catch(() => {
476
-
477
- this.$swal("ブックマークを追加出来ません。", {
478
-
479
- icon: "error"
480
-
481
- });
482
-
483
- });
484
-
485
- }
486
-
487
- }
488
-
489
- },
490
-
491
- ```

6

内容変更

2021/06/07 11:47

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -8,6 +8,130 @@
8
8
 
9
9
 
10
10
 
11
+ しかし、以下でまずnumが常に1の値しか返ってこないです・・
12
+
13
+
14
+
15
+ ```ここに言語を入力
16
+
17
+ methods: {
18
+
19
+ const id = firebase
20
+
21
+ .firestore()
22
+
23
+ .collection("users")
24
+
25
+ .doc(this.$route.params.uid)
26
+
27
+ .collection("bookmarks")
28
+
29
+ .doc().id;
30
+
31
+
32
+
33
+ savePost() {
34
+
35
+ const num = 0;
36
+
37
+ num++;
38
+
39
+
40
+
41
+ if (num % 2 == 0) {
42
+
43
+ firebase
44
+
45
+ .firestore()
46
+
47
+ .collection("users")
48
+
49
+ .doc(this.$route.params.uid)
50
+
51
+ .collection("bookmarks")
52
+
53
+ .doc(bookmark.id)
54
+
55
+ .delete()
56
+
57
+ .then(() => {
58
+
59
+ this.$swal("ブックマークを取り消ししました。", {
60
+
61
+ icon: "success"
62
+
63
+ });
64
+
65
+ })
66
+
67
+ .catch(() => {
68
+
69
+ this.$swal("ブックマークを取り消し出来ません。", {
70
+
71
+ icon: "error"
72
+
73
+ });
74
+
75
+ });
76
+
77
+ } else {
78
+
79
+ firebase
80
+
81
+ .firestore()
82
+
83
+ .collection("users")
84
+
85
+ .doc(this.$route.params.uid)
86
+
87
+ .collection("bookmarks")
88
+
89
+ .add({
90
+
91
+ id:id,
92
+
93
+ uid: this.$route.params.uid,
94
+
95
+ list: this.list,
96
+
97
+ time: firebase.firestore.FieldValue.serverTimestamp(),
98
+
99
+ })
100
+
101
+ .then(() => {
102
+
103
+ this.$swal("ブックマークに追加しました。", {
104
+
105
+ icon: "success"
106
+
107
+ });
108
+
109
+ })
110
+
111
+ .catch(() => {
112
+
113
+ this.$swal("ブックマークを追加出来ません。", {
114
+
115
+ icon: "error"
116
+
117
+ });
118
+
119
+ });
120
+
121
+ }
122
+
123
+ }
124
+
125
+ },
126
+
127
+ ```
128
+
129
+
130
+
131
+ ```
132
+
133
+
134
+
11
135
  そこで理想としては上記に対して奇数回ボタンが押下されたらボタンを色付きのアイコンを表示、
12
136
 
13
137
  偶数回ボタンが押下されたらを色無しのアイコンを表示して切り替わるようにしたいです。
@@ -18,6 +142,8 @@
18
142
 
19
143
 
20
144
 
145
+
146
+
21
147
  分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
22
148
 
23
149
  対象の1つの投稿に対してボタンが(色付き ⇔ 色無し)切り替わるのではなく、全ての投稿のボタンが(色付き ⇔ 色無し)切り替わってしまうと思います。
@@ -252,122 +378,114 @@
252
378
 
253
379
  },
254
380
 
381
+ methods: {
382
+
383
+ const id = firebase
384
+
385
+ .firestore()
386
+
387
+ .collection("users")
388
+
389
+ .doc(this.$route.params.uid)
390
+
391
+ .collection("bookmarks")
392
+
393
+ .doc().id;
394
+
395
+
396
+
397
+ savePost() {
398
+
399
+ const num = 0;
400
+
401
+ num++;
402
+
403
+
404
+
405
+ if (num % 2 == 0) {
406
+
407
+ firebase
408
+
409
+ .firestore()
410
+
411
+ .collection("users")
412
+
413
+ .doc(this.$route.params.uid)
414
+
415
+ .collection("bookmarks")
416
+
255
- bookmark: {
417
+ .doc(bookmark.id)
418
+
256
-
419
+ .delete()
420
+
421
+ .then(() => {
422
+
423
+ this.$swal("ブックマークを取り消ししました。", {
424
+
425
+ icon: "success"
426
+
427
+ });
428
+
429
+ })
430
+
431
+ .catch(() => {
432
+
433
+ this.$swal("ブックマークを取り消し出来ません。", {
434
+
435
+ icon: "error"
436
+
437
+ });
438
+
439
+ });
440
+
441
+ } else {
442
+
443
+ firebase
444
+
257
- type: Object
445
+ .firestore()
446
+
447
+ .collection("users")
448
+
449
+ .doc(this.$route.params.uid)
450
+
451
+ .collection("bookmarks")
452
+
453
+ .add({
454
+
455
+ id:id,
456
+
457
+ uid: this.$route.params.uid,
458
+
459
+ list: this.list,
460
+
461
+ time: firebase.firestore.FieldValue.serverTimestamp(),
462
+
463
+ })
464
+
465
+ .then(() => {
466
+
467
+ this.$swal("ブックマークに追加しました。", {
468
+
469
+ icon: "success"
470
+
471
+ });
472
+
473
+ })
474
+
475
+ .catch(() => {
476
+
477
+ this.$swal("ブックマークを追加出来ません。", {
478
+
479
+ icon: "error"
480
+
481
+ });
482
+
483
+ });
484
+
485
+ }
486
+
487
+ }
258
488
 
259
489
  },
260
490
 
261
- },
262
-
263
- methods: {
264
-
265
- const id = firebase
266
-
267
- .firestore()
268
-
269
- .collection("users")
270
-
271
- .doc(this.$route.params.uid)
272
-
273
- .collection("bookmarks")
274
-
275
- .doc().id;
276
-
277
-
278
-
279
- savePost() {
280
-
281
- const num = 0;
282
-
283
- num++;
284
-
285
-
286
-
287
- if (num % 2 == 0) {
288
-
289
- firebase
290
-
291
- .firestore()
292
-
293
- .collection("users")
294
-
295
- .doc(this.$route.params.uid)
296
-
297
- .collection("bookmarks")
298
-
299
- .doc(bookmark.id)
300
-
301
- .delete()
302
-
303
- .then(() => {
304
-
305
- this.$swal("ブックマークを取り消ししました。", {
306
-
307
- icon: "success"
308
-
309
- });
310
-
311
- })
312
-
313
- .catch(() => {
314
-
315
- this.$swal("ブックマークを取り消し出来ません。", {
316
-
317
- icon: "error"
318
-
319
- });
320
-
321
- });
322
-
323
- } else {
324
-
325
- firebase
326
-
327
- .firestore()
328
-
329
- .collection("users")
330
-
331
- .doc(this.$route.params.uid)
332
-
333
- .collection("bookmarks")
334
-
335
- .add({
336
-
337
- id:id,
338
-
339
- uid: this.$route.params.uid,
340
-
341
- list: this.list,
342
-
343
- time: firebase.firestore.FieldValue.serverTimestamp(),
344
-
345
- })
346
-
347
- .then(() => {
348
-
349
- this.$swal("ブックマークに追加しました。", {
350
-
351
- icon: "success"
352
-
353
- });
354
-
355
- })
356
-
357
- .catch(() => {
358
-
359
- this.$swal("ブックマークを追加出来ません。", {
360
-
361
- icon: "error"
362
-
363
- });
364
-
365
- });
366
-
367
- }
368
-
369
- }
370
-
371
- },
372
-
373
- ```
491
+ ```

5

内容修正

2021/06/07 03:22

投稿

TMTN
TMTN

スコア53

test CHANGED
@@ -1 +1 @@
1
- ブックマークボタンを押下されたらレクショへ保存もう一度押したらレクショから対象を削除したい
1
+ ブックマークボタンを奇数回押下でボタンを色付きのアイコン 偶数回下でボタンを色無のアイコンと切り替えたい
test CHANGED
@@ -1,18 +1,16 @@
1
- #ブックマークボタンを押下されたら、レクショへ保存もう一度押したらレクショから対象を削除したい
1
+ #ブックマークボタンを奇数回押下でボタンを色付きのアイコン 偶数回下でボタンを色無のアイコンと切り替えたい
2
-
3
-
4
-
2
+
3
+
4
+
5
- 現状、savePost()というメソッドを用意し、ボタンを押下されたFirestoreにあるusersコレクションのサブコレクションbookmarksへ保存されるようになっております。
5
+ 現状、savePost()というメソッドを用意し、奇数回ボタンを押下された場合、Firestoreにあるusersコレクションのサブコレクションbookmarksへ保存
6
-
7
-
8
-
9
- しかし、上記要素のみの為、現状は保存されたら保存されっぱなしで何度も同じ投稿が保存される形となってしまっておりますが・・
6
+
10
-
11
-
12
-
13
- 理想としてはボタンが押下されたらFirestoreのbookmarksコレクションへ保存(ボタン:黄色)、
14
-
15
- もう一度Firestoreのbookmarksコレクションから対象を削除したい(ボタン:白)と切り替わるようにしたす。
7
+ 偶数回ボタンを下され場合は、Firestoreにあるusersコレクションサブコレクションbookmarksから削除されるようにコードを書てみてます。
8
+
9
+
10
+
11
+ そこで理想としては上記に対して奇数回ボタンが押下されたらボタンを色付きのアイコンを表示、
12
+
13
+ 偶数回ボタンが押下されたらを色無しのアイコンを表示して切り替わるようにしたいです。
16
14
 
17
15
 
18
16
 
@@ -20,200 +18,356 @@
20
18
 
21
19
 
22
20
 
21
+ 分からない事としては、ループさせている投稿に対してボタンを切り替えを実装しても投稿全てに適用され、
22
+
23
- また、以下js部ドキュメトidを参照たいのですがid取得方法分からず行詰まっております。
23
+ 対象1つ投稿に対してボタが(色付き ⇔ 色無)切り替わるのではなく全て投稿ボタン(色付 ⇔ 色無し)切り替わってうと思います。
24
+
25
+
26
+
27
+ 対象の投稿のみにブックマークのボタンを「色付き ⇔ 色無し」切り替える為にはどのようにしたらよいのでしょうか・・
28
+
29
+
30
+
31
+ 分かる方いらっしゃいましたらお力添えを頂きたいです。
32
+
33
+
34
+
35
+ よろしくお願いいたします。
36
+
37
+
38
+
39
+ #bookmark.vue(親コンポーネント)
40
+
41
+
42
+
43
+ ```html
44
+
45
+ <template>
46
+
47
+ <div>
48
+
49
+ <Header />
50
+
51
+ <div class="bookmarkList flex">
52
+
53
+ <h3 class="bookmarkList-title flex">{{ bookmarkData.name }} さんのブックマーク一覧</h3>
54
+
55
+ <hr class="separate" />
56
+
57
+ <div class="bookmarkList-posts">
58
+
59
+ {{bookmarkList.list}}
60
+
61
+ <paginate name="paginate-bookmarkList" tag="ol" :list="bookmarkList" :per="3">
62
+
63
+
64
+
65
+ <List
66
+
67
+ v-for="(list, index) in paginated('paginate-bookmarkList')"
68
+
69
+ :bookmark="bookmark"
70
+
71
+ :key="list.id"
72
+
73
+ />
74
+
75
+ </paginate>
76
+
77
+ <paginate-links
78
+
79
+ for="paginate-bookmarkList"
80
+
81
+ class="pagination flex"
82
+
83
+ :show-step-links="true"
84
+
85
+ :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'"
86
+
87
+ ></paginate-links>
88
+
89
+ </div>
90
+
91
+ </div>
92
+
93
+ </div>
94
+
95
+ </template>
96
+
97
+ ```
98
+
99
+
100
+
101
+ ```js
102
+
103
+ export default {
104
+
105
+ data() {
106
+
107
+ return {
108
+
109
+ bookmarkData: {},
110
+
111
+ paginate: ["paginate-bookmarkList"],
112
+
113
+ bookmarkList: []
114
+
115
+ };
116
+
117
+ },
118
+
119
+ components: {
120
+
121
+ Header,
122
+
123
+ List
124
+
125
+ },
126
+
127
+ methods: {},
128
+
129
+ created() {
130
+
131
+ firebase
132
+
133
+ .firestore()
134
+
135
+ .collection("users")
136
+
137
+ .doc(this.$route.params.uid)
138
+
139
+ .get()
140
+
141
+ .then(snapshot => {
142
+
143
+ this.bookmarkData = snapshot.data();
144
+
145
+ });
146
+
147
+
148
+
149
+ firebase
150
+
151
+ .firestore()
152
+
153
+ .collection("users")
154
+
155
+ .doc(this.$route.params.uid)
156
+
157
+ .collection("bookmarks")
158
+
159
+ .orderBy("time", "desc")
160
+
161
+ .get()
162
+
163
+ .then((snapshot) => {
164
+
165
+ snapshot.forEach((doc) => {
166
+
167
+ this.bookmarkList.push(...doc.data(), id: doc.id);
168
+
169
+ });
170
+
171
+ });
172
+
173
+ }
174
+
175
+ };
176
+
177
+ </script>
178
+
179
+ ```
180
+
181
+
182
+
183
+ #list.vue(子コンポーネント)
184
+
185
+
186
+
187
+ ```html
188
+
189
+ <template>
190
+
191
+ <div class="card">
192
+
193
+ <div class="face face1 flex">
194
+
195
+ <div class="content">
196
+
197
+ <img
198
+
199
+ class="profile-icon"
200
+
201
+ width="50"
202
+
203
+ height="50"
204
+
205
+ :src="
206
+
207
+ returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
208
+
209
+ "
210
+
211
+ />
212
+
213
+ <h3>{{ list.title }}</h3>
214
+
215
+ </div>
216
+
217
+ </div>
218
+
219
+ <div class="face face2 flex">
220
+
221
+ <div class="content flex">
222
+
223
+ <button class="hide-btn" @click="deletePost">×</button>
224
+
225
+ <p>{{ list.description }}</p>
226
+
227
+ <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
228
+
229
+ <img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
230
+
231
+ <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
232
+
233
+ </div>
234
+
235
+ </div>
236
+
237
+ </div>
238
+
239
+ </template>
240
+
241
+ ```
24
242
 
25
243
 
26
244
 
27
245
  ```ここに言語を入力
28
246
 
247
+ props: {
248
+
249
+ list: {
250
+
251
+ type: Object
252
+
253
+ },
254
+
255
+ bookmark: {
256
+
257
+ type: Object
258
+
259
+ },
260
+
261
+ },
262
+
263
+ methods: {
264
+
265
+ const id = firebase
266
+
267
+ .firestore()
268
+
269
+ .collection("users")
270
+
271
+ .doc(this.$route.params.uid)
272
+
273
+ .collection("bookmarks")
274
+
275
+ .doc().id;
276
+
277
+
278
+
279
+ savePost() {
280
+
281
+ const num = 0;
282
+
283
+ num++;
284
+
285
+
286
+
287
+ if (num % 2 == 0) {
288
+
29
-     firebase
289
+ firebase
30
-
290
+
31
- .firestore()
291
+ .firestore()
32
-
292
+
33
- .collection("users")
293
+ .collection("users")
34
-
294
+
35
- .doc(this.$route.params.uid)
295
+ .doc(this.$route.params.uid)
36
-
296
+
37
- .collection("bookmarks")
297
+ .collection("bookmarks")
38
-
298
+
39
- .doc() //このdocのidを参照したい
299
+ .doc(bookmark.id)
40
-
300
+
41
- .delete()
301
+ .delete()
302
+
303
+ .then(() => {
304
+
305
+ this.$swal("ブックマークを取り消ししました。", {
306
+
307
+ icon: "success"
308
+
309
+ });
310
+
311
+ })
312
+
313
+ .catch(() => {
314
+
315
+ this.$swal("ブックマークを取り消し出来ません。", {
316
+
317
+ icon: "error"
318
+
319
+ });
320
+
321
+ });
322
+
323
+ } else {
324
+
325
+ firebase
326
+
327
+ .firestore()
328
+
329
+ .collection("users")
330
+
331
+ .doc(this.$route.params.uid)
332
+
333
+ .collection("bookmarks")
334
+
335
+ .add({
336
+
337
+ id:id,
338
+
339
+ uid: this.$route.params.uid,
340
+
341
+ list: this.list,
342
+
343
+ time: firebase.firestore.FieldValue.serverTimestamp(),
344
+
345
+ })
346
+
347
+ .then(() => {
348
+
349
+ this.$swal("ブックマークに追加しました。", {
350
+
351
+ icon: "success"
352
+
353
+ });
354
+
355
+ })
356
+
357
+ .catch(() => {
358
+
359
+ this.$swal("ブックマークを追加出来ません。", {
360
+
361
+ icon: "error"
362
+
363
+ });
364
+
365
+ });
366
+
367
+ }
368
+
369
+ }
370
+
371
+ },
42
372
 
43
373
  ```
44
-
45
-
46
-
47
- ![イメージ説明](7483dd7bc4760a68e068e314fd3c912a.png)
48
-
49
-
50
-
51
- 分かる方いらっしゃいましたらお力添えを頂きたいです。
52
-
53
-
54
-
55
- よろしくお願いいたします。
56
-
57
-
58
-
59
- #list.vue
60
-
61
-
62
-
63
- ```html
64
-
65
- <template>
66
-
67
- <div class="card">
68
-
69
- <div class="face face1 flex">
70
-
71
- <div class="content">
72
-
73
- <img
74
-
75
- class="profile-icon"
76
-
77
- width="50"
78
-
79
- height="50"
80
-
81
- :src="
82
-
83
- returnUserData() ? returnUserData().uploadedImage.fileUrl : preview
84
-
85
- "
86
-
87
- />
88
-
89
- <h3>{{ list.title }}</h3>
90
-
91
- </div>
92
-
93
- </div>
94
-
95
- <div class="face face2 flex">
96
-
97
- <div class="content flex">
98
-
99
- <button class="hide-btn" @click="deletePost">×</button>
100
-
101
- <p>{{ list.description }}</p>
102
-
103
- <router-link :to="`/chat/${list.id}`" class="join-btn flex">ルームへ参加</router-link>
104
-
105
- <!-- 「list.id」propsで親コンポーネントから取得したidを取得。-->
106
-
107
- <img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
108
-
109
- <p class="post-time">{{ list.time.toDate().toLocaleString() }}</p>
110
-
111
- </div>
112
-
113
- </div>
114
-
115
- </div>
116
-
117
- </template>
118
-
119
- ```
120
-
121
-
122
-
123
- ```js
124
-
125
- methods: {
126
-
127
- savePost() {
128
-
129
- const num = 0;
130
-
131
- num++;
132
-
133
-
134
-
135
- if (num % 2 == 0) {
136
-
137
- firebase
138
-
139
- .firestore()
140
-
141
- .collection("users")
142
-
143
- .doc(this.$route.params.uid)
144
-
145
- .collection("bookmarks")
146
-
147
- .doc() //このdocのidを参照したい
148
-
149
- .delete()
150
-
151
- .then(() => {
152
-
153
- this.$swal("ブックマークを取り消ししました。", {
154
-
155
- icon: "success"
156
-
157
- });
158
-
159
- })
160
-
161
- .catch(() => {
162
-
163
- this.$swal("ブックマークを取り消し出来ません。", {
164
-
165
- icon: "error"
166
-
167
- });
168
-
169
- });
170
-
171
- } else {
172
-
173
- firebase
174
-
175
- .firestore()
176
-
177
- .collection("users")
178
-
179
- .doc(this.$route.params.uid)
180
-
181
- .collection("bookmarks")
182
-
183
- .add({
184
-
185
- uid: this.$route.params.uid,
186
-
187
- list: this.list,
188
-
189
- time: firebase.firestore.FieldValue.serverTimestamp(),
190
-
191
- })
192
-
193
- .then(() => {
194
-
195
- this.$swal("ブックマークに追加しました。", {
196
-
197
- icon: "success"
198
-
199
- });
200
-
201
- })
202
-
203
- .catch(() => {
204
-
205
- this.$swal("ブックマークを追加出来ません。", {
206
-
207
- icon: "error"
208
-
209
- });
210
-
211
- });
212
-
213
- }
214
-
215
- }
216
-
217
- },
218
-
219
- ```

4

内容修正

2021/06/06 21:11

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -2,13 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- 現状、savePost()というメソッドを用意して、ボタンを押下されたらFirestoreにあるusersコレクションのサブコレクションbookmarksへ
5
+ 現状、savePost()というメソッドを用意して、ボタンを押下されたらFirestoreにあるusersコレクションのサブコレクションbookmarksへ保存されるようになっております。
6
-
7
- 保存されるようになっております。
6
+
8
-
9
-
10
-
7
+
8
+
11
- しかし、上記要素のみの為、現状は保存されたら保存されっぱなしなってます
9
+ しかし、上記要素のみの為、現状は保存されたら保存されっぱなしで何度も同じ投稿が保存される形となってっておりまが・・
12
10
 
13
11
 
14
12
 

3

内容修正

2021/06/06 20:39

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- 以下のjs部のドキュメントidを参照したいのですが、このidの取得方法が分からず行き詰まっております。
25
+ また、以下のjs部のドキュメントidを参照したいのですが、このidの取得方法が分からず行き詰まっております。
26
26
 
27
27
 
28
28
 
@@ -46,6 +46,10 @@
46
46
 
47
47
 
48
48
 
49
+ ![イメージ説明](7483dd7bc4760a68e068e314fd3c912a.png)
50
+
51
+
52
+
49
53
  分かる方いらっしゃいましたらお力添えを頂きたいです。
50
54
 
51
55
 

2

内容修正

2021/06/06 19:30

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -200,7 +200,7 @@
200
200
 
201
201
  .catch(() => {
202
202
 
203
- this.$swal("ブックマークを取り消し出来ません。", {
203
+ this.$swal("ブックマークを追加出来ません。", {
204
204
 
205
205
  icon: "error"
206
206
 

1

内容修正

2021/06/06 19:28

投稿

TMTN
TMTN

スコア53

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,27 @@
22
22
 
23
23
 
24
24
 
25
- ようにしたら切り替えれるか分からず行き詰ってしまっております。
25
+ 以下js部のドキュメントidを参照したいのですが、このidの取得方法が分からず行き詰まっております。
26
+
27
+
28
+
29
+ ```ここに言語を入力
30
+
31
+     firebase
32
+
33
+ .firestore()
34
+
35
+ .collection("users")
36
+
37
+ .doc(this.$route.params.uid)
38
+
39
+ .collection("bookmarks")
40
+
41
+ .doc() //このdocのidを参照したい
42
+
43
+ .delete()
44
+
45
+ ```
26
46
 
27
47
 
28
48
 
@@ -38,7 +58,7 @@
38
58
 
39
59
 
40
60
 
41
- ```ここに言語を入力
61
+ ```html
42
62
 
43
63
  <template>
44
64
 
@@ -98,41 +118,99 @@
98
118
 
99
119
 
100
120
 
101
- ```ここに言語を入力
121
+ ```js
102
122
 
103
123
  methods: {
104
124
 
105
125
  savePost() {
106
126
 
107
- firebase
108
-
109
- .firestore()
110
-
111
- .collection("users")
112
-
113
- .doc(this.$route.params.uid)
114
-
115
- .collection("bookmarks")
116
-
117
- .add({
118
-
119
- uid: this.$route.params.uid,
120
-
121
- list: this.list,
122
-
123
- time: firebase.firestore.FieldValue.serverTimestamp(),
124
-
125
- })
126
-
127
- .then(() => {
128
-
129
- this.$swal("お気に入りに追加しました。", {
130
-
131
- icon: "success"
132
-
133
- });
134
-
135
- });
127
+ const num = 0;
128
+
129
+ num++;
130
+
131
+
132
+
133
+ if (num % 2 == 0) {
134
+
135
+ firebase
136
+
137
+ .firestore()
138
+
139
+ .collection("users")
140
+
141
+ .doc(this.$route.params.uid)
142
+
143
+ .collection("bookmarks")
144
+
145
+ .doc() //このdocのidを参照したい
146
+
147
+ .delete()
148
+
149
+ .then(() => {
150
+
151
+ this.$swal("ブックマークを取り消ししました。", {
152
+
153
+ icon: "success"
154
+
155
+ });
156
+
157
+ })
158
+
159
+ .catch(() => {
160
+
161
+ this.$swal("ブックマークを取り消し出来ません。", {
162
+
163
+ icon: "error"
164
+
165
+ });
166
+
167
+ });
168
+
169
+ } else {
170
+
171
+ firebase
172
+
173
+ .firestore()
174
+
175
+ .collection("users")
176
+
177
+ .doc(this.$route.params.uid)
178
+
179
+ .collection("bookmarks")
180
+
181
+ .add({
182
+
183
+ uid: this.$route.params.uid,
184
+
185
+ list: this.list,
186
+
187
+ time: firebase.firestore.FieldValue.serverTimestamp(),
188
+
189
+ })
190
+
191
+ .then(() => {
192
+
193
+ this.$swal("ブックマークに追加しました。", {
194
+
195
+ icon: "success"
196
+
197
+ });
198
+
199
+ })
200
+
201
+ .catch(() => {
202
+
203
+ this.$swal("ブックマークを取り消し出来ません。", {
204
+
205
+ icon: "error"
206
+
207
+ });
208
+
209
+ });
210
+
211
+ }
212
+
213
+ }
136
214
 
137
215
  },
138
216