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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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回答

5887閲覧

[Nuxt.js][Vuex] Vueファイル以外の外部ファイルでStoreのデータを参照したい

rihako

総合スコア4

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クリップ

投稿2021/04/11 07:07

前回の質問で、Vuexのstore/index.jsにあるcurrentModelと言うデータを取得する際に出るエラーに関して質問しました。
開発途中で、Vueファイル以外の場所でVuex Storeのデータを取得したい場合は、「モジュールモード」でないといけないと言う情報を得たので、修正しましたが、また新たなエラーが出たので質問させていただきます。

まず、モジュールモードにするために、store/index.jsを削除し、store/store.jsを作りました。
以下のコードを記述してあります。

JavaScript

1export const state = () => ({ 2 currentModel: null, 3}) 4 5export const getters = { 6 getCurrentModel(state) { 7 return state.currentModel 8 } 9} 10 11export const mutations = { 12 saveCurrentModel(state, currentModel){ 13 state.currentModel = currentModel; 14 } 15}

そして、jsファイル内で以下のようにして、StoreのcurrentModelを取得しようとしました。

JavaScript

1import store from '~/store/store.js' 2 3//省略 4 5const Model = store.getters['store/getCurrentModel']; 6 7//省略

しかしながら、このようなエラーが出ます。

TypeError: Cannot read property 'getters' of undefined

解決法をご教授いただけると大変助かります。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

storeというものは、複数のページ(.vue)から共通で使える変数を保存するところなので、まったく外部の.jsから参照するというのは趣旨に反しているのではないでしょうか。

プログラムが動いている間は常に少なくとも1つはアクティブな vueファイルがあるはずですから、そこから自前の関数を呼ぶ時に必要なデータを引数で渡せば良いと思います。

export default function ({ current_model }) { console.log(current_model) }

vue

1my_function( this.$store.getters['currentModel'])

リアクティブ性を維持するのは難しくなるかも。

追記:

もしかして、複数のページで同じ処理を行うのをまとめたいということでしょうか?
それならPluginを使うと良いです。

公式マニュアル:
https://jp.vuejs.org/v2/guide/plugins.html

export default ({ store }) => { return xxx }

投稿2021/04/11 07:43

編集2021/04/11 07:52
gambaldia

総合スコア266

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

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

rihako

2021/04/11 08:01

ご回答ありがとうございます。プラグインご紹介いただきありがとうございます。 確かに趣旨に反していますね...本当は、.vueで取得しているデータを、importしているjsファイルに渡したいだけなのですが。。 以下のように.vueのmouted()でnewインスタンスをしている時に、引数を渡すことはできるのでしょうか..。調べてもあまり出てこなかったtのでとりあえずVuexを使ってみたと言う感じです。 import threeModel from './js/threeModel'; //省略 data () { return { model: 'コンパイル後のglbファイルのパス', } }, mounted () { this.threeModel = new threeModel({ model: this.model, }); },
rihako

2021/04/11 08:31 編集

おおお、初めて読みました、ありがとうございます。 とても参考になります!!! この方のを参考にしていて、.vue内のmethodsにかくことはお勧めしないと書いてあったのでとりあえずそれに従っていました。でもこのgithub見る限り、別に問題ないんですかね... https://qiita.com/misaki_mofu/items/145ac26d600b429a6f8a
gambaldia

2021/04/11 08:28

Nuxtをつかっているのであれば、mounted() よりも fetch()のほうが良いと思います。 Storeも使えます。 async fetch ({store, params}) { const data = await store.dispatch('fetchData', params)
rihako

2021/04/11 08:39

ありがとうございます!!ちょっといろいろ試して来ます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問