2017-10-12 10 views
1

私は1つのモジュール(javascriptファイル)をvueコンテキスト外に持っています。私はこのjavascriptファイルからアクションをディスパッチする必要があります。出来ますか ?はいの場合は、どうですか?vueコンポーネントではなくjavascriptファイルからアクションをディスパッチする方法はありますか?

jsfile.js(Javascriptのファイル)

const detail = {}; 

detail.validateLocation = (location) => { 
    // need to dispatch one action from here. 
    // dispatch('SET_LOCATION', {city: 'California'}) 
    // how to dispatch action ? 
} 

export default detail; 

export default { 
    SET_LOCATION: ({ commit}, data) => { 
    commit('SET_LOCATION', data); 
    }, 
} 

action.js store.js

import Vue from 'vue'; 
import Vuex from 'vuex'; 
import actions from './actions'; 
import mutations from './mutations'; 
import getters from './getters'; 
export function createStore() { 
    return new Vuex.Store({ 
    modules: {}, 
    state: { 
     location: null 
    }, 
    actions, 
    mutations, 
    getters, 
    }); 
} 

答えて

2

まず、store.jsにストアを作成します。

import Vue from 'vue'; 
import Vuex from 'vuex'; 
import actions from './actions'; 
import mutations from './mutations'; 
import getters from './getters'; 

const store = new Vuex.Store({ 
    modules: {}, 
    state: { 
     location: null 
    }, 
    actions, 
    mutations, 
    getters, 
    }); 

export default store 

そして、jsfile.jsにストアをインポートし、それを使用します。

import store from "./store" 

const detail = {}; 

detail.validateLocation = (location) => { 
    // Use imported store 
    store.dispatch('SET_LOCATION', {city: 'California'}) 
} 

export default detail; 

あなたはVueのインスタンスを作成し、メインまたはインデックスファイルを持っていると仮定すると、あなたは今、おそらく作成機能は、単に店をインポートするインポートからインポートを変更する必要があります。

+0

私は次のようにしています: import {createStore} from '../store'; const store = createStore(); store.dispatch( 'SET_LOCATION'、{city: 'California'}); でも動作していません –

+0

@MukundKumarしないでください。単に './store"からストアをインポートします。ストアを作成するために関数をエクスポートする必要はありません。ストアをインポートするだけです。作成関数をエクスポートして複数のファイルにストアを作成すると、複数のストアが終了します。 – Bert

+0

私は新しいVuex.Store()をcreateStore関数でラップしています。それはうまくいくはずです。 –

関連する問題