質問編集履歴
8
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -571,3 +571,11 @@
|
|
571
571
|
|
572
572
|
|
573
573
|

|
574
|
+
|
575
|
+
|
576
|
+
|
577
|
+
###「t」を削除後
|
578
|
+
|
579
|
+
|
580
|
+
|
581
|
+

|
7
追記4追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -551,3 +551,23 @@
|
|
551
551
|
|
552
552
|
|
553
553
|

|
554
|
+
|
555
|
+
|
556
|
+
|
557
|
+
#追記4
|
558
|
+
|
559
|
+
|
560
|
+
|
561
|
+
###検索前
|
562
|
+
|
563
|
+
|
564
|
+
|
565
|
+

|
566
|
+
|
567
|
+
|
568
|
+
|
569
|
+
###検索後
|
570
|
+
|
571
|
+
|
572
|
+
|
573
|
+

|
6
追記3追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -543,3 +543,11 @@
|
|
543
543
|
青色括弧につきましては、 filteredPostDataをdata()内で初期化してくださいとのことでしたので、
|
544
544
|
|
545
545
|
data()内で filteredPostData: []と初期化しました。
|
546
|
+
|
547
|
+
|
548
|
+
|
549
|
+
#追記3
|
550
|
+
|
551
|
+
|
552
|
+
|
553
|
+

|
5
追記2追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -239,3 +239,307 @@
|
|
239
239
|
|
240
240
|
|
241
241
|

|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
#追記2
|
246
|
+
|
247
|
+
以下のようにコードを書き替えましたので掲載させていただきます。
|
248
|
+
|
249
|
+
|
250
|
+
|
251
|
+
#board.vue(親コンポーネント)
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
```html
|
256
|
+
|
257
|
+
<template>
|
258
|
+
|
259
|
+
<div>
|
260
|
+
|
261
|
+
<Header />
|
262
|
+
|
263
|
+
<Post v-model="searchWord" />
|
264
|
+
|
265
|
+
<div class="post">
|
266
|
+
|
267
|
+
<h2 id="top" class="post-tll neon">投稿一覧</h2>
|
268
|
+
|
269
|
+
<div class="post-inner">
|
270
|
+
|
271
|
+
<div class="post-items">
|
272
|
+
|
273
|
+
<paginate name="paginate-log" tag="ol" :list="filteredPostData" :per="12">
|
274
|
+
|
275
|
+
<List
|
276
|
+
|
277
|
+
v-for="(list, index) in paginated('paginate-log')"
|
278
|
+
|
279
|
+
:index="index"
|
280
|
+
|
281
|
+
:list="list"
|
282
|
+
|
283
|
+
:userDatas="userDatas"
|
284
|
+
|
285
|
+
:key="list.id"
|
286
|
+
|
287
|
+
/>
|
288
|
+
|
289
|
+
</paginate>
|
290
|
+
|
291
|
+
<paginate-links
|
292
|
+
|
293
|
+
for="paginate-log"
|
294
|
+
|
295
|
+
class="pagination flex"
|
296
|
+
|
297
|
+
v-scroll-to="postTop"
|
298
|
+
|
299
|
+
:show-step-links="true"
|
300
|
+
|
301
|
+
></paginate-links>
|
302
|
+
|
303
|
+
</div>
|
304
|
+
|
305
|
+
</div>
|
306
|
+
|
307
|
+
</div>
|
308
|
+
|
309
|
+
</div>
|
310
|
+
|
311
|
+
</template>
|
312
|
+
|
313
|
+
```
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
```js
|
318
|
+
|
319
|
+
export default {
|
320
|
+
|
321
|
+
data() {
|
322
|
+
|
323
|
+
return {
|
324
|
+
|
325
|
+
title: "",
|
326
|
+
|
327
|
+
contents: "",
|
328
|
+
|
329
|
+
image: "",
|
330
|
+
|
331
|
+
postData: [],
|
332
|
+
|
333
|
+
paginate: ["paginate-log"],
|
334
|
+
|
335
|
+
postTop: "#top",
|
336
|
+
|
337
|
+
userDatas: [],
|
338
|
+
|
339
|
+
searchWord: "",
|
340
|
+
|
341
|
+
filteredPostData: []
|
342
|
+
|
343
|
+
};
|
344
|
+
|
345
|
+
},
|
346
|
+
|
347
|
+
components: {
|
348
|
+
|
349
|
+
Header,
|
350
|
+
|
351
|
+
Post,
|
352
|
+
|
353
|
+
List
|
354
|
+
|
355
|
+
},
|
356
|
+
|
357
|
+
computed: {
|
358
|
+
|
359
|
+
filteredPostData(value) {
|
360
|
+
|
361
|
+
console.log(value);
|
362
|
+
|
363
|
+
if (value != "") {
|
364
|
+
|
365
|
+
return this.postData.filter(v => {
|
366
|
+
|
367
|
+
return ~v.genre.indexOf(this.searchWord);
|
368
|
+
|
369
|
+
});
|
370
|
+
|
371
|
+
} else {
|
372
|
+
|
373
|
+
return this.postData;
|
374
|
+
|
375
|
+
}
|
376
|
+
|
377
|
+
}
|
378
|
+
|
379
|
+
}
|
380
|
+
|
381
|
+
},
|
382
|
+
|
383
|
+
created() {
|
384
|
+
|
385
|
+
// "posts"コレクションの全ドキュメントを取得。
|
386
|
+
|
387
|
+
firebase
|
388
|
+
|
389
|
+
.firestore()
|
390
|
+
|
391
|
+
.collection("posts")
|
392
|
+
|
393
|
+
.orderBy("time", "desc")
|
394
|
+
|
395
|
+
.get()
|
396
|
+
|
397
|
+
.then(snapshot => {
|
398
|
+
|
399
|
+
//"posts"(参照先)のスナップショットを得る
|
400
|
+
|
401
|
+
snapshot.forEach(doc => {
|
402
|
+
|
403
|
+
//上記で得たデータをforEachでドキュメントの数だけ"doc"データに格納
|
404
|
+
|
405
|
+
this.postData.push({ ...doc.data(), id: doc.id });
|
406
|
+
|
407
|
+
//更にpostDataの空配列に格納した"doc"データを格納
|
408
|
+
|
409
|
+
});
|
410
|
+
|
411
|
+
});
|
412
|
+
|
413
|
+
};
|
414
|
+
|
415
|
+
</script>
|
416
|
+
|
417
|
+
|
418
|
+
|
419
|
+
```
|
420
|
+
|
421
|
+
|
422
|
+
|
423
|
+
#post.vue(子コンポーネント)
|
424
|
+
|
425
|
+
|
426
|
+
|
427
|
+
```html
|
428
|
+
|
429
|
+
<div class="search-inner flex">
|
430
|
+
|
431
|
+
<h2 class="search-tll neon flex">Cinemaryを検索する</h2>
|
432
|
+
|
433
|
+
<hr class="separate" />
|
434
|
+
|
435
|
+
<div class="search-main-contens flex">
|
436
|
+
|
437
|
+
<input
|
438
|
+
|
439
|
+
placeholder="例)アクション 恋愛 ミステリー SF ホラー ミュージカル etc.."
|
440
|
+
|
441
|
+
class="search-main-item"
|
442
|
+
|
443
|
+
type="search"
|
444
|
+
|
445
|
+
v-model="inputValue"
|
446
|
+
|
447
|
+
/>
|
448
|
+
|
449
|
+
</div>
|
450
|
+
|
451
|
+
```
|
452
|
+
|
453
|
+
|
454
|
+
|
455
|
+
```js
|
456
|
+
|
457
|
+
export default {
|
458
|
+
|
459
|
+
data() {
|
460
|
+
|
461
|
+
return {
|
462
|
+
|
463
|
+
|
464
|
+
|
465
|
+
~ 省略 ~
|
466
|
+
|
467
|
+
|
468
|
+
|
469
|
+
},
|
470
|
+
|
471
|
+
props: {
|
472
|
+
|
473
|
+
value: {
|
474
|
+
|
475
|
+
type: String,
|
476
|
+
|
477
|
+
required: true
|
478
|
+
|
479
|
+
}
|
480
|
+
|
481
|
+
},
|
482
|
+
|
483
|
+
computed: {
|
484
|
+
|
485
|
+
inputValue: {
|
486
|
+
|
487
|
+
get() {
|
488
|
+
|
489
|
+
return this.value;
|
490
|
+
|
491
|
+
},
|
492
|
+
|
493
|
+
set(value) {
|
494
|
+
|
495
|
+
this.$emit("input", value);
|
496
|
+
|
497
|
+
}
|
498
|
+
|
499
|
+
}
|
500
|
+
|
501
|
+
},
|
502
|
+
|
503
|
+
searchData(value) {
|
504
|
+
|
505
|
+
this.$emit("searchData", value);
|
506
|
+
|
507
|
+
}
|
508
|
+
|
509
|
+
}
|
510
|
+
|
511
|
+
};
|
512
|
+
|
513
|
+
|
514
|
+
|
515
|
+
```
|
516
|
+
|
517
|
+
|
518
|
+
|
519
|
+

|
520
|
+
|
521
|
+
|
522
|
+
|
523
|
+
また、以下のようなエラーが出ておりまして調べてみましたが赤で囲った箇所のエラー内容で
|
524
|
+
|
525
|
+
objectとなっている原因が分からなかった為、エラー内容を追記いたします・・
|
526
|
+
|
527
|
+
|
528
|
+
|
529
|
+
```ここに言語を入力
|
530
|
+
|
531
|
+
[Vue warn]: Method "computed" has type "object" in the component definition. Did you reference the function correctly?
|
532
|
+
|
533
|
+
```
|
534
|
+
|
535
|
+
メソッド "computed" は、コンポーネント定義のタイプ "object" を持っています。関数を正しく参照しましたか?
|
536
|
+
|
537
|
+
|
538
|
+
|
539
|
+
---
|
540
|
+
|
541
|
+
|
542
|
+
|
543
|
+
青色括弧につきましては、 filteredPostDataをdata()内で初期化してくださいとのことでしたので、
|
544
|
+
|
545
|
+
data()内で filteredPostData: []と初期化しました。
|
4
追記1
test
CHANGED
File without changes
|
test
CHANGED
@@ -217,3 +217,25 @@
|
|
217
217
|
},
|
218
218
|
|
219
219
|
```
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
#追記1
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
以下はコードになります。
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+

|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
実際にタイプした時の画面になります。
|
236
|
+
|
237
|
+
入力したタイミングでリアルタイムで表示が切り替われば理想です。。
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+

|
3
内容変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,7 +34,17 @@
|
|
34
34
|
|
35
35
|
入力フォームで入力された値はpost.vue(子コンポーネント)より取得はできているので
|
36
36
|
|
37
|
-
あとは
|
37
|
+
あとは以下を行って表示させると思うのですが、どのように条件を絞ってあげたらいいのか分からない状況です。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
- valueを引数に渡しているので、valueをもとにデータを絞る
|
42
|
+
|
43
|
+
- Firestore内のフィールド「genre」でデータを絞る
|
44
|
+
|
45
|
+
- postData内を一度クリアしてあげて再pushしてあげる
|
46
|
+
|
47
|
+
|
38
48
|
|
39
49
|
|
40
50
|
|
@@ -178,7 +188,7 @@
|
|
178
188
|
|
179
189
|
methods: {
|
180
190
|
|
181
|
-
search() {
|
191
|
+
search(value) {
|
182
192
|
|
183
193
|
firebase
|
184
194
|
|
2
内容変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,17 +2,21 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
現
|
5
|
+
現在、post.vue(子コンポーネント)にてinputタグで入力フォームを作成し、
|
6
|
-
|
6
|
+
|
7
|
-
そこで入力された値を$emitでboard.vue(親コンポーネント)に渡しています。
|
7
|
+
そこで入力された値を$emitでboard.vue(親コンポーネント)に渡しています。(値を取得できていることは確認済)
|
8
|
+
|
9
|
+
|
10
|
+
|
8
|
-
|
11
|
+

|
12
|
+
|
13
|
+
|
14
|
+
|
9
|
-
|
15
|
+
通常投稿一覧に投稿されたpostを「時間(降順)」で表示させておりますが、
|
10
|
-
|
16
|
+
|
11
|
-
|
17
|
+
post.vue(子コンポーネント)から受けたデータをもとに「ジャンル」という値で絞って再表示させたいです。
|
12
|
-
|
13
|
-
|
14
|
-
|
18
|
+
|
15
|
-
Firestoreのpostsコレクションのデータにはそれぞれgenreというフィールドに値は取得しております。
|
19
|
+
※Firestoreのpostsコレクションのデータにはそれぞれgenreというフィールドに値は取得しております。
|
16
20
|
|
17
21
|
|
18
22
|
|
@@ -28,7 +32,7 @@
|
|
28
32
|
|
29
33
|
|
30
34
|
|
31
|
-
|
35
|
+
入力フォームで入力された値はpost.vue(子コンポーネント)より取得はできているので
|
32
36
|
|
33
37
|
あとは条件で絞って表示させるのですが、どのように条件を絞ってあげたらいいのか分からない状況です。
|
34
38
|
|
1
内容変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -182,6 +182,8 @@
|
|
182
182
|
|
183
183
|
.collection("posts")
|
184
184
|
|
185
|
+
.orderBy("genre")
|
186
|
+
|
185
187
|
.orderBy("time", "desc")
|
186
188
|
|
187
189
|
.get()
|