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

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

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

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

Nuxt.js

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

Q&A

解決済

1回答

630閲覧

Nuxt.jsで年齢の計算結果を表示できるようにしたい。

wattyo

総合スコア10

Firebase

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

Nuxt.js

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

0グッド

0クリップ

投稿2020/10/31 03:09

前提・実現したいこと

Nuxt.jsとfirebaseを使って道場生の情報として生年月日から年齢を計算するプログラムを作っています。計算まではうまく行きましたが、その計算結果を表示させることがうまくできなくて困っています。

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

Cannot read property 'age' of undefined

該当のソースコード

js

1<template> 23 <td>{{ this.age }}</td> 45</template> 6 7export default { 8 data() { 9 return { 10 age: '', 11 }, 12 created() { 13 this.$store.dispatch('setStudentsRef', db.collection('students')); 14 // 年齢を計算 // 15 const studentRef = db.collection('students'); 16 studentRef.get().then(querySnapshot => { 17 querySnapshot.forEach(birthDayDocSnapshot => { 18 const birthDay = birthDayDocSnapshot.data().pickerDate; 19 const today = moment(); 20 let y = Math.floor(moment.duration(today.diff(birthDay)).as('months') / 12); 21 this.age = y; 22 }); 23 }); 24 },

試したこと

console.log(this.age)とするとちゃんと数字のデータはちゃんと取れています。
コールバック関数の問題でもなさそうですし、どうすればいいのか困っています。

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

で省略されている部分のコードを見ないと原因を特定することは難しいですが、おそらくv-bindなどでtemplate内で参照する this がVueインスタンスが存在するのと別のコンテキストに置き換わってしまっているものと思われます。

以下のように、thisを使わずにdataを参照するようにしたらいかがでしょうか?

html

1<template> 23 <td>{{ age }}歳</td> 45</template>

また問題の切り分け方法に関してですが、次の ようにdata => templateの描画に問題があるのか created のロジック内に問題があるのかを行うことができます。

js

1 data() { 2 return { 3 // 適当な値を初期値としてセットしてtemplateに描画されるかを確認 4 age: 999, 5 }, 6

投稿2020/10/31 04:24

DaikiOjima

総合スコア271

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

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

wattyo

2020/10/31 04:35

回答ありがとうございます。thisを外すことで描画はされましたが、例えば、一人目に登録した道場生の年齢が30歳、二人目に登録した道場生の年齢が10歳とした場合、なぜか一人目の年齢も10歳になってしまいます。
wattyo

2020/11/01 05:45

とりあえず表示させることができましたが、別の問題が発生したので改めてまた質問を行います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問