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

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

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

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

Firebase

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

Q&A

1回答

1499閲覧

【Vue.js】TypeError:formatDate is not a functionが出てしまいます。

Tikka123456

総合スコア34

Vue.js

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

Firebase

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

0グッド

0クリップ

投稿2020/06/17 06:54

編集2020/06/18 11:18

Vue.js、Buefy、firebaseを使いwebアプリを作成しております。
フォームに入力した情報をボタンをクリックして@clickイベントを実行しpublishを実行しています。
その際、
TypeError:formatDate is not a function
[Vue warn]: Error in v-on handler: "TypeError: formatDate is not a function"

found in

---> <BButton>
<Create> at src/views/Create.vue
<App> at src/App.vue
<Root>
というエラーが出てしまいます。
恐らくショボいミスなのでしょうが、ご享受お願いします。

Home.vue

Vue

1<template> 2 <div class="home"> 3 <h2 class="title is-3">taitoru</h2> 4 <hr> 5 <Item class="item" v-for="post in posts" :key="post.id" :post="post"></Item> 6 </div> 7 8</template> 9 10<script> 11import Item from '@/components/Item' 12import { db } from '@/main' 13 14export default { 15 name: 'Home', 16 components: { 17 Item 18 }, 19 data() { 20 return { 21 posts: [] 22 } 23 }, 24 firestore() { 25 return { 26 posts: db.collection('posts') 27 } 28 } 29} 30</script> 31

Item.Vue

Vue

1<template> 2 <article class="message"> 3 <div class="message-header"> 4 <h2>{{ post.title }}</h2> 5 </div> 6 7 <div class="content"> 8 <figure class="image is-10x10"> 9 <div class="is-rounded" :style=" 'background-image: url(' + user.photoURL + ')' "></div> 10 </figure> 11 <p>{{ user.displayName }}</p> 12 <div class="createAt"> 13 <p>{{ post.createdAt }}</p> 14 </div> 15 </div> 16 </div> 17 18 19 </article> 20</template> 21 22<script> 23import { db } from '@/main' 24export default { 25 props: ['post'], 26 data() { 27 return { 28 user: {} 29 } 30 }, 31 firestore() { 32 return { 33 user: db.collection('users').doc(this.$props.post.uid) 34 } 35 } 36} 37</script> 38
<template>   中略 <b-button type="is-primary" @click="publish" expanded>投稿する</b-button>   中略 </template> <script> import firebase from 'firebase'; import { auth } from '@/main' import { db } from '@/main' export default { data() { return { title: '', tags: [], content: '', tag: '', currentUser: {} } }, created() { auth.onAuthStateChanged(user => { this.currentUser = user }) }, methods: { addTag() { this.tags.push(this.tag), this.tag = '' }, removeTag(idx) { this.tags.splice(idx,1) }, publish() { const date = this.$date(new Date(), "dd MMMM, yyyy") db.collection('posts').add({ title: this.title, tags: this.tags, content: this.content, createdAt: date, uid: this.currentUser.uid }) .then((post) => this.$router.push('/post/' + this.post.uid + '/' + this.post.id), alert('The post got published!') ) } } } </script>

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

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

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

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

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

rururu3

2020/06/17 08:08

再現させる為試してみたら vue.runtime.esm.js:619 [Vue warn]: Error in v-on handler: "TypeError: this.$date is not a function" っていうエラーになりました。多分vueのプラグインで$dateを定義してるかと思いますので、そちらのソースもお願いたします。
Tikka123456

2020/06/17 08:49

返信ありがとうございます。VueDateFnsというプラグインを使っています。ド初心者なので定義されているソースが分かりませんでした。
guest

回答1

0

Firebase環境無いので確認できないのですが、

JS

1 const date = this.$date(new Date(), "DD MMMM, YYYY") // こっちではワーニングが出る 2 const date = this.$date(new Date(), "dd MMMM, yyyy") // これなら大丈夫

だけど、記載されているようなワーニングは出ないので

JS

1 createdAt: date,

これじゃないかなと…

JS

1const date = firebase.firestore.Timestamp.fromDate(new Date(`2020/01/01 00:00:00`));

こんな感じにしてみるとか、createdAtだけコメントにしてエラーでないか確認するとかしてみたらいかがでしょう。


やってみた

vue

1<template> 2 <div> 3 <button type="is-primary" @click="publish" expanded>投稿する</button> 4 </div> 5</template> 6 7<style scoped> 8</style> 9 10<script> 11import firebase from 'firebase' 12 13// Initialize Firebase 14firebase.initializeApp({ 15 適切なやつ 16}); 17 18export default { 19 data () { 20 return { 21 title: 'title', 22 tags: 'tags', 23 content: 'content', 24 uid: 'uid', 25 admin: null 26 }; 27 }, 28 29 methods: { 30 publish () { 31 const date = this.$date(new Date(), 'dd MMMM, yyyy'); 32 let db = firebase.firestore(); 33 34 db.collection('posts').add({ 35 title: this.title, 36 tags: this.tags, 37 content: this.content, 38 createdAt: date, 39 uid: this.uid 40 }) 41 .then((post) => 42 // this.$router.push('/post/' + this.post.uid + '/' + this.post.id), 43 alert('The post got published!' + post) 44 ) 45 } 46 }, 47 48 created () { 49 } 50}; 51</script>

でできちゃいましたね…formatDateをソースで使ってる所あるか調べるほうがいいのかな…

投稿2020/06/17 09:27

編集2020/06/17 16:00
rururu3

総合スコア5545

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

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

Tikka123456

2020/06/17 12:41

返信ありがとうございます。 const date = this.$date(new Date(), "dd MMMM, yyyy")の場合同じエラーが出て、createdAt: dateをコメントアウトしても同じエラーが出てしまいます。firestore.Timestamp.を使った場合Firebaseのセキュリティ関連のエラーが出てきました。もしかしたら、そちらが原因かもしれません。
rururu3

2020/06/17 13:55

ちょっと明日余裕あるときにfirebaseの環境用意して試してみますね
Tikka123456

2020/06/17 14:13

お手数おかけしてすいません。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問