#プロフィール情報データを上書きする際、既存情報を初期表示させたいです。
現在、マイページにプロフィールの変更をするモーダルウィンドウを設置しており、
各項目内容を入力して、更新ボタンを押したら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()); }); } }, };
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。