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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Firebase

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

Q&A

解決済

1回答

646閲覧

add.vueでうった情報をindex.vueで表示させたい

wattyo

総合スコア10

Firebase

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

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

0グッド

0クリップ

投稿2020/10/23 06:52

編集2020/10/25 14:04

前提・実現したいこと

nuxt.jsとfirebaseを使って道場生管理アプリを作っています。ディレクトリ構成は以下です。

├── components │ ├──profile │    ├──name.vue │ ├──kana.vue │ : ├──pages │ ├── add.vue │ └── index.vue ├── plugins │ ├── firebase.js │ └── store ├── add.js └── index.js

index.jsとadd.js以下のファイルは親子関係にあります。
道場生の登録画面であるadd.vueでうった情報をindex.vueで表示させたいのですが、index.vueに表示されません。
原因を突き詰めていくとどうやらfirebase.firestore()がきちんとimportできていないのが原因ぽいですが何故importできないのかわからず困っています。

発生している問題・エラーメッセージ

vue

1const db = firebase.firestore() 2をadd.vueにかくと 3client.js?06a0:97 TypeError: Cannot read property 'firestore' of undefined 4書かないと 5client.js?06a0:97 TypeError: studentsRef.add is not a function と出る。

該当のソースコード

add.vue

vue

1<template> 2 <v-app> 3 <v-main> 4 <v-container> 5 <v-row> 6 <v-col> 7 <v-row justify="center"> 8 <v-icon class="ml-5"> 9 mdi-account 10 </v-icon> 11 <h1 class="ml-5">生徒管理</h1> 12 <v-spacer></v-spacer> 13 </v-row> 14 <v-divider color="blue"/> 15 </v-col> 16 </v-row> 17 <ValidationObserver ref="observer" v-slot="{ invalid }" immediate> 18 <v-form @submit.prevent="registration" v-model="valid"> 19 <!-- <Name @send_name='sendName' /> --> 20 <v-row class="ml-5 mt-1" dense> 21 <!-- 道場生の姓名入力 --> 22 <v-col cols="2"> 23 <ValidationProvider v-slot="{ errors, valid}" name="姓" rules="required|zenkaku"> 24 <v-badge left color="error" content="必須"> 25 <v-text-field 26 label="姓" 27 outlined 28 placeholder="田中" 29 v-model="familyName" 30 required 31 :error-messages="errors" 32 :success="valid"/> 33 </v-badge> 34 </ValidationProvider> 35 </v-col> 36 <v-col cols="2"> 37 <ValidationProvider v-slot="{ errors, valid }" name="名" rules="required|zenkaku"> 38 <v-text-field 39 label="名" 40 outlined 41 placeholder="太郎" 42 v-model="firstName" 43 required 44 :error-messages="errors" 45 :success="valid"/> 46 </ValidationProvider> 47 </v-col> 48 <v-col/> 49 <!-- 保護者氏名入力 --> 50 <v-col cols="2"> 51 <ValidationProvider v-slot="{ errors, valid}" name="保護者姓" rules="required|zenkaku"> 52 <v-badge left color="error" content="必須"> 53 <v-text-field 54 label="保護者姓" 55 outlined 56 placeholder="田中" 57 v-model="parentsFamilyName" 58 required 59 :error-messages="errors" 60 :success="valid"/> 61 </v-badge> 62 </ValidationProvider> 63 </v-col> 64 <v-col cols="2"> 65 <ValidationProvider v-slot="{ errors, valid}" name="保護者名" rules="required|zenkaku"> 66 <v-text-field 67 label="保護者名" 68 outlined 69 placeholder="次郎" 70 v-model="parentsFirstName" 71 required 72 :error-messages="errors" 73 :success='valid'/> 74 </ValidationProvider> 75 </v-col> 76 <v-col/> 77 </v-row> 78 <v-row dense> 79 <v-col justify="center" align="center"> 80 <v-btn type="submit" nuxt color="success" :disabled="invalid">送信</v-btn> 81 </v-col> 82 </v-row> 83 </v-form> 84 </ValidationObserver> 85 </v-container> 86 </v-main> 87 </v-app> 88</template> 89 90<script> 91import { mapActions } from 'vuex' 92import { db } from '~/plugins/firebase.js' 93import firebase from '~/plugins/firebase.js' 94import { ValidationObserver, ValidationProvider } from 'vee-validate' 95import Name from '~/components/profile/Name.vue' 96export default { 97 components : { 98 ValidationObserver, 99 ValidationProvider, 100 Name 101 }, 102 data() { 103 return { 104 valid: false, 105 familyName: '', 106 firstName: '', 107 parentsFamilyName: '', 108 parentsFirstName: '', 109 } 110 }, 111 // created: { 112 // sendName() { 113 // return ({firstName: this.firstName, familyName:this.familyName}) 114 // } 115 // }, 116 methods: { 117 async registration() { 118 const student = { 119 familyName: this.familyName, 120 firstName: this.firstName 121 } 122 const db = firebase.firestore() //これを入れるか入れないかでエラー内容が変わる。 123 const studentsRef = db.collection('students').doc('生徒一覧') 124 await studentsRef.add(student) 125 console.log(student) 126 // this.$router.push(`/`) 127 this.familyName = '' 128 this.firstName = '' 129 // await this.$store.dispatch('signUp',this.firstName) 130 // this.familyName = '' 131 // this.firstName = '' 132 }, 133 134 }, 135} 136</script> 137

js

1import * as firebase from "firebase/app"; 2import 'firebase/auth' 3import 'firebase/firestore' 4 5const firebaseConfig = { 67}; 8 9 10firebase.initializeApp(firebaseConfig); 11export default firebase; 12const db = firebase.firestore(); 13export { db }

試したこと

記事を参照し、コピペしていますのでタイポミスはないように思います。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは
nuxt.config.jsでpluginの読み込みはしていますか??

js

1 plugins: [ 2 '~/plugins/firebase.js' 3 ],

投稿2020/10/27 02:20

nakao107107

総合スコア43

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

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

wattyo

2020/10/27 02:23

確認したところ、できておらず読み込みしたら表示されました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問