質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Q&A

解決済

1回答

760閲覧

【Vue x Firestore】自身が投稿した記事のみをマイページに表示させたいです。

TMTN

総合スコア53

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

0グッド

0クリップ

投稿2021/05/01 13:01

#自身が投稿した記事のみをマイページに表示させたいです。

現在投稿自体には投稿したタイミングでuidというidを持たせてFirestoreにデータ追加しているのですが、
それをマイページで自身の投稿したものだけマイページに表示させたく考えています。

マイページを表示中は、mypage/uidという形でURLを取得してます。

HTML

1<h3 class="post-list flex">{{ profileData.name }} さんの投稿一覧</h3> 2 <div class="profile-posts"> 3 <List v-for="(list, index) in listData" :index="index" :list="list :key="list.id"/> 4 </div>

.doc(this.$route.params.uid)で現在のURLのパラメータを取得して
それに合致するものだけマイページに表示させようと思っているのですが、
現状以下のソースで何も投稿が表示されなく困っています。。

js

1export default { 2 data() { 3 return { 4 listData: [], 5 }; 6 7created() { 8 9 firebase 10 .firestore() 11 .collection("posts") 12 .doc(this.$route.params.uid) 13 .get() 14 .then((snapshot) => { 15 snapshot.forEach((doc) => { 16 this.listData.push(doc.data()); 17 }); 18 }); 19 }, 20

原因が分かる方いらっしゃいましたらお力添えをいただきたいです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Masa-Shin

2021/05/01 14:56

- listDataには値が入っていますか? - consoleに何かエラーは出ていますか? - thenのforeachの中のdoc.data()にはちゃんと値が入っていますか?
TMTN

2021/05/01 15:26

index.esm.js?2591:54 It looks like you're using the development build of the Firebase JS SDK. When deploying Firebase apps to production, it is advisable to only import the individual SDK components you intend to use. For the module builds, these are available in the following manner (replace <PACKAGE> with the name of a component - i.e. auth, database, etc): CommonJS Modules: const firebase = require('firebase/app'); require('firebase/<PACKAGE>'); ES Modules: import firebase from 'firebase/app'; import 'firebase/<PACKAGE>'; Typescript: import firebase from 'firebase/app'; import 'firebase/<PACKAGE>'; eval @ index.esm.js?2591:54 ./node_modules/firebase/dist/index.esm.js @ chunk-vendors.js:1454 __webpack_require__ @ index.js:849 fn @ index.js:151 eval @ cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/main.vue?vue&type=script&lang=js&:2 ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/main.vue?vue&type=script&lang=js& @ index.js:1022 __webpack_require__ @ index.js:849 fn @ index.js:151 eval @ webpack-internal:///…e=script&lang=js&:2 ./src/views/main.vue?vue&type=script&lang=js& @ index.js:2115 __webpack_require__ @ index.js:849 fn @ index.js:151 eval @ main.vue?f47d:1 ./src/views/main.vue @ index.js:2103 __webpack_require__ @ index.js:849 fn @ index.js:151 eval @ index.js?a18c:1 ./src/router/index.js @ index.js:1983 __webpack_require__ @ index.js:849 fn @ index.js:151 eval @ main.js:12 ./src/main.js @ index.js:1971 __webpack_require__ @ index.js:849 fn @ index.js:151 1 @ index.js:2296 __webpack_require__ @ index.js:849 checkDeferredModules @ index.js:46 (anonymous) @ index.js:925 (anonymous) @ index.js:928 mypage.vue?1dde:452 Uncaught (in promise) ReferenceError: cl is not defined at eval (mypage.vue?1dde:453) at eval (prebuilt-ac190846-5fb4dac2.js?d66c:18162) at eval (prebuilt-ac190846-5fb4dac2.js?d66c:16394) at eval (prebuilt-ac190846-5fb4dac2.js?d66c:11576) at t.inorderTraversal (prebuilt-ac190846-5fb4dac2.js?d66c:2817) at t.inorderTraversal (prebuilt-ac190846-5fb4dac2.js?d66c:2817) at t.inorderTraversal (prebuilt-ac190846-5fb4dac2.js?d66c:2817) at t.inorderTraversal (prebuilt-ac190846-5fb4dac2.js?d66c:2735) at t.forEach (prebuilt-ac190846-5fb4dac2.js?d66c:11575) at t.forEach (prebuilt-ac190846-5fb4dac2.js?d66c:16393) というエラーは出ています。 しかし、doc.date()には値はしっかりとれています。
Masa-Shin

2021/05/01 15:33 編集

listDataにも値がきちんと入っているとすれば、Listには値が渡っているはずなので、List以下でエラーが起きているのですかね。 エラーメッセージに`Uncaught (in promise) ReferenceError: cl is not defined`と出ていますが、貼られているコードに「cl」という記述がないのも気になります。
TMTN

2021/05/01 15:41

clというのは自信がコンソールログをclとショートカットで設定しているせいかと思います。 それを消してリロードしたらエラーは出ていない状況です。
hoshi-takanori

2021/05/01 16:17

collection("posts").doc(this.$route.params.uid).get() の結果は単一のドキュメントになるはずですね…。 collection("posts").where("uid", "==", this.$route.params.uid).get() みたにする必要があるはず。 Firestore のデータ構造はどうなってますか?
TMTN

2021/05/01 16:39

そうだったのですね!!一つ勉強になりました!本当にありがとうございます!
guest

回答1

0

自己解決

firebase .firestore() .collection("posts") .where("uid", "==", this.$route.params.uid) .get() .then(snapshot => { snapshot.forEach(doc => { this.listData.push(doc.data()); console.log(doc.data()); }); }); },

上記により解決することが出来ました。

投稿2021/05/03 01:42

TMTN

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問