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

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

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

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

Firebase

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

Cloud Firestore

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

Q&A

解決済

1回答

626閲覧

【Vue x Firestore】プロフィール情報データを上書きする際、既存情報を初期表示としてさせたいです。

TMTN

総合スコア53

Vue.js

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

Firebase

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

Cloud Firestore

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

0グッド

0クリップ

投稿2021/04/28 08:26

編集2021/04/29 12:31

#プロフィール情報データを上書きする際、既存情報を初期表示させたいです。

現在、マイページにプロフィールの変更をするモーダルウィンドウを設置しており、
各項目内容を入力して、更新ボタンを押したらFirestoreにデータが格納されて
データをget(取得)して表示させるようにしております。

そこで一度データを入れたものを、変更したい時があるかと思います。
その時に既存で既にデータを入力したものを初期値として表示させたいです。

例えば、新規登録後

【名前:ほげ】としていたものを【名前:ほげほげ】

と変更したい時に

一度目の入力時は:placeholderで初期値を表示させたり、
セレクトボックスでは、性別や年齢のところはhideとして初期値を表示させていますが、

二度目以降の入力時には、一度目入力したデータを初期値として表示させたいです。

説明が分かりづらく申し訳ございません。。

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

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

<template v-for="data in profileData" :index="index" :profile="profile" :key="data.id" > <div> <Header /> <div class="mypage flex"> <div class="mypage-inner flex"> <div class="profile-inner-l flex"> <img class="profile-inner-l-img" src="../assets/アイコン.jpg" alt="デフォルト画像" /> <div class="profile-inner-l-name">{{ profileData.name }}</div> </div> <div class="profile-inner-r flex"> <div class="follow-inner"> <div class="post"> <div>0</div> <p>POSTS</p> </div> <div class="follow"> <div>0</div> <p>FOLLOW</p> </div> <div class="follower"> <div>0</div> <p>FOLLOWER</p> </div> </div> <hr class="separate" /> <div class="btn-inner"> <button @click=" show(); openModal(); " class="profile-edit flex" > プロフィール編集 </button> <!-- <button class="profile-txt follow-btn" @click="follow"> フォロー </button> --> </div> <modal class="modal-inner" v-scroll-lock="open" name="edit" :width="1100" :height="720" > <div class="modal-header flex"> <h2 class="profile-tll flex">プロフィールを編集する</h2> <hr class="separate" /> </div> <div class="modal-body"> <div class="profile-inner flex"> <div class="profile-contens flex"> <div class="profile-img-inner flex"> <img :src="uploadedImage" width="200" height="200" class="profile-img" alt="プロフィール画像" /> <button class="profile-txt profile-update" @click="update"> プロフィール画像を編集する </button> </div> <div class="line"></div> <div class="profile-items flex"> <div class="profile-contens flex"> <input type="text" class="profile-item" placeholder="名前" v-model="name" /> </div> <div class="profile-contens flex"> <select class="profile-select" v-model="sex" :style="{ color: sex == '' ? 'gray' : 'white' }" > <option class="profile-item" value hidden>性別</option> <option v-for="sex in sexs" :value="sex.name" :key="sex.id" class="profile-item" style="color: white;" >{{ sex.name }}</option > </select> </div>  ~ 省略 ~ <button class="hide-btn flex" @click="hide">×</button> </div> <button @click="updateBtn" class="update-btn flex"> 更新 </button> </div> </div> </modal> </div> </div> <div class="profile-list"> <ul class="list-item"> <li class="list-items"> 性別: <div class="list-color">{{ profileData.sex }}</div> </li> <li class="list-items"> 年齢: <div class="list-color">{{ profileData.age }}</div> </li> <li class="list-items"> 職業: <div class="list-color">{{ profileData.profession }}</div> </li> <li class="list-items"> 居住地: <div class="list-color">{{ profileData.access }}</div> </li> <li class="list-items"> 好きな映画: <div class="list-color">{{ profileData.favMovie }}</div> </li> <li class="list-items"> 好きなジャンル: <div class="list-color">{{ profileData.genre }}</div> </li> <li class="list-items"> 自己紹介: <div class="list-color">{{ profileData.selfpr }}</div> </li> </ul> </div> <hr class="separate" /> <div class="profile-post flex"> <h3>{{ profileData.name }} さんの投稿一覧</h3> </div> </div> </div> </template>
export default { data() { return { name: "", sex: "", sexs: [{ name: "男性" }, { name: "女性" }, { name: "その他" }], age: "", ages: [ { name: "10際未満" }, { name: "10 ~ 19歳" }, { name: "20 ~ 29歳" },      ~ 省略 ~ ], access: "", accesses: [ { name: "北海道" }, { name: "青森県" }, { name: "岩手県" },      ~ 省略 ~ ], profession: "", professions: [ { name: "公務員" }, { name: "会社員" }, { name: "自営業" },      ~ 省略 ~ ], selfpr: "", genre: "", genres: [ { id: 0, name: "ジャンル" }, { id: 1, name: "アクション" }, { id: 2, name: "ドラマ" }, { id: 3, name: "恋愛" },      ~ 省略 ~ ], favMovie: "", uploadedImage: "", profileData: {}, //配列にしないようにする。 open: false, }; }, components: { Header, }, methods: { updateBtn() { firebase .firestore() .collection("users") .doc(this.$route.params.uid) .set( { name: this.name, sex: this.sex, age: this.age, access: this.access, selfpr: this.selfpr, profession: this.profession, uploadedImage: this.uploadedImage, genre: this.genre, favMovie: this.favMovie, time: firebase.firestore.FieldValue.serverTimestamp(), //サーバ側で値設定 }, { merge: true } ); this.$swal({ title: "内容確認", text: "この内容で投稿しますか?", icon: "info", buttons: true, dangerMode: true, }).then((willDelete) => { if (willDelete) { this.$swal("投稿しました。", { icon: "success", }); this.$router.go({ path: `/mypage/${this.$route.params.uid}`, force: true }); //プロフィール編集されたらページをリロード } else { this.$swal("キャンセルしました。"); } }); }, show: function() { this.$modal.show("edit"); }, hide: function() { this.$modal.hide("edit"); }, openModal() { this.open = true; }, closeModal() { this.open = false; }, }, created() { const currentUser = firebase.auth().currentUser; if (currentUser) { firebase .firestore() .collection("users") .doc(this.$route.params.uid) .get() .then((snapshot) => { this.profileData = snapshot.data(); // console.log(snapshot.data()); }); } }, };

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

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

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

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

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

guest

回答1

0

自己解決

data で定義している変数に代入し既にデータを入力されている場合には
以下のような感じに設定すれば解決しました。

this.profileData = snapshot.data(); this.sex = this.profileData.sex; this.age = this.profileData.age; // ...

投稿2021/05/03 01:44

TMTN

総合スコア53

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問