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

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

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

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

Nuxt.js

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

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1136閲覧

Nuxtでfetchを使う場合、各ファイルでexportしないといけないのか

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

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

Nuxt.js

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

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/05/24 02:01

編集2019/05/24 02:02

ナビゲーションを作る際、ページが変わる時にナビゲーションを閉じるようにしたかったためにapp/store/index.jsに以下のような記述をしました。

js

1import Vuex from 'vuex' 2 3const store = () => new Vuex.Store({ 4 state: { 5 isMenuActive: false 6 }, 7 mutations: { 8 toggleMenu(state) { 9 state.isMenuActive = !state.isMenuActive 10 }, 11 resetMenu(state) { 12 state.isMenuActive = false 13 } 14 } 15}) 16 17export default store 18

そして全ページにこの読み込みを行いたいため
app/layouts/default.vueに

js

1export default { 2 components: { 3 TheHeader, 4 TheFooter 5 }, 6 resetMenu(state) { 7 state.isMenuActive = false 8 } 9} 10

と書いたのですが読み込まれていないようです。

js

1 resetMenu(state) { 2 state.isMenuActive = false 3 } 4

の記述は適用したいページ全てに記載しないといけないのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

Nuxt ないしは Vue.js の使い方に大きな誤解があるように思います。
結論から申し上げますと、複数のページに共通機能を書く必要はなく、 default.vue などの共通で読み込まれるファイルにコードを記述することになると思います。

ただ、おそらく複数の勘違いが複合的に発生し、意図したことを実現できていないので、ひとつづつ解決していかれるのが良いと思います。(個人的には、いきなり Nuxt を利用するのではなく、 Vue, Vuex, VueRouter と順に一つづつ学習を進められることをお勧めしたいです。)

今提示いただいているコードから目的を達成するまでに必要な技術すべてを解説するとかなりの量になってしまうので、ざっくりと、見えている部分の問題点だけ解説させていただきます。

単一ファイルコンポーネントの書式

default.vue のような、拡張子が .vue となっているファイルは、単一ファイルコンポーネントと呼ばれ、書式が決まっています。

提示のコードでは、

javascript

1resetMenu(state) { 2 state.isMenuActive = false 3}

の部分が書式に則っていないため、無視されている(あるいはエラーになって実行を妨げている)ものと思います。
単一ファイルコンポーネントで利用できる項目は、Vue API リファレンス の、オプション と記載されている項目になります。

いずれにせよ、Vue ストアの state オブジェクトを受け取るような機能は無いので、提示いただいたコードは誤りかと思います。

ページが変わるたびに実行

ご提示のコードでは、 ページが変わるたびに実行する という肝心なところのコードが記述されていません。方法はいろいろ考えられますが、スマートなのは こちらの Qiita のページに記載の方法かと思います。

ナビゲーションの開閉処理

いうまでもないことですが、ストアにあるデータを書き換えた際に、ナビゲーションを閉じたり開いたりするためには、ナビゲーションの開閉状態とストアのデータが何らかの手段で連携していなければいけません。
ナビゲーション部分の定義(おそらく default.vue の <template> タグ内に記載がある)に、そのための記述が必要です。(さらに記述の仕方次第では、ストアのデータを取り込むコードを <script> 以下に記載するなども必要になってくるかと思います)。

プログラムの流れ

ストアで resetMenu メソッドを定義し、state.isMenuActive を変更する関数をわざわざ定義したにも関わらず、default.vue ではそのメソッドを呼び出さず、直接 state.isMenuActive を書き換えようとしたりと、全体のプログラムの流れが理解できていないように思います。

プログラムは正確に記述しなければ大抵の場合意図しない結果をもたらすので、まずは Nuxt のガイド を読むなどして、 Nuxt の各ファイル、各項目の機能を知り開発を行われるとよいと思います。

投稿2019/05/25 14:03

R.Mizukami

総合スコア1086

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

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

退会済みユーザー

退会済みユーザー

2019/05/28 02:56

勉強不足でした。おっしゃる通り理解が足りないので順をおって理解していきたいと思います。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問