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

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

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

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

Firebase

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

Cloud Firestore

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

Q&A

解決済

1回答

532閲覧

【Vue x Firestore】サブコレクション「bookmarks」から投稿情報を取得して表示させたい

TMTN

総合スコア53

Vue.js

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

Firebase

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

Cloud Firestore

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

0グッド

0クリップ

投稿2021/06/05 11:30

編集2021/06/06 12:40

#サブコレクション「bookmarks」から投稿情報を取得して表示させたい。

現状、list.vueというコンポーネントにてsavePost()という関数名で投稿を保存するボタンを設け、
「users」というコレクションに「bookmarks」というサブコレクションを作成し
bookmarksにlist: this.list(投稿情報)、uid(保存したユーザー)、time(保存した時間)を格納してます。

イメージ説明

#lis.vue(子コンポーネント)

<img src="../assets/ブックマーク.jpg" alt="ブックマーク" class="bookmark-icon" @click="savePost" />
export default { data() { return { }; }, props: { list: { type: Array }, }, savePost() { firebase .firestore() .collection("users") .doc(this.$route.params.uid) .collection("bookmarks") .add({ uid: this.$route.params.uid, list: this.list, time: firebase.firestore.FieldValue.serverTimestamp(), }) .then(() => { this.$swal("お気に入りに追加しました。", { icon: "success" }); }); },

#board.vue(親コンポーネント)

board.vueにて子コンポーネントのListデータをpropsで渡しています。

<div class="post-items"> <paginate name="paginate-log" tag="ol" :list="postData" :per="12"> <List v-for="(list, index) in paginated('paginate-log')" :index="index" :list="list" :userDatas="userDatas" :key="list.id" /> </paginate> <paginate-links for="paginate-log" class="pagination flex" v-scroll-to="postTop" :show-step-links="true" > </paginate-links> <!--postDataのデータをlist関数とindex関数にそれぞれ格納--> </div>

#bookmark.vue

bookmarksというコンポーネントでサブコレクションの「bookmarks」からlist情報を表示させたいと考えておりますが、
以下現状、そのまま保存したユーザーの空listを表示させているだけになってしまっています。

<div class="bookmarkList-posts"> <paginate name="paginate-bookmarkList" tag="ol" :list="bookmarkList" :per="3"> <List v-for="(list, index) in paginated('paginate-bookmarkList')" :index="index" :list="list" :key="list.id" /> </paginate> <paginate-links for="paginate-bookmarkList" class="pagination flex" :show-step-links="true" :style="bookmarkList == '' ? 'display:none;' : 'display:flex;'" ></paginate-links> </div>
export default { data() { return { paginate: ["paginate-bookmarkList"], bookmarkList: [] }; }, created() { firebase .firestore() .collection("users") .doc(this.$route.params.uid) .collection("bookmarks") .orderBy("time", "desc") .get() .then((snapshot) => { snapshot.forEach((doc) => { this.bookmarkList.push(doc.data()); }); }); } };

イメージ説明

青で囲った[list]部を表示させたいのですが、「bookmarkList.list」としても表示されません・・

原因は赤で囲ったエラーコードにもあるように「配列」で取得できておらず、「オブジェクト型」になっていることが
原因かと思われますが、配列に変換させるようなやり方はあるのでしょうか・・

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

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

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

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

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

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

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

guest

回答1

0

自己解決

ドキュメントのlist内に重ねてlist{配列:配列・・・}として保存してしまっていたので、
...this.listとして配列をばらすことで解決いたしました。

saveBookmark() { const ref = firebase .firestore() .collection("users") .doc(this.$route.params.uid) .collection("bookmarks") .doc(); const id = ref.id; firebase .firestore() .collection("users") .doc(this.$route.params.uid) .collection("bookmarks") .doc(id) .set({ bookmarkId: id, ...this.list, time: firebase.firestore.FieldValue.serverTimestamp() }) .then(() => { this.$swal("ブックマークに追加しました。", { icon: "success" }); }) .catch(() => { this.$swal("ブックマークを追加出来ません。", { icon: "error" }); }); },

投稿2021/06/08 11:56

TMTN

総合スコア53

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問