vuex
および と組み合わせて VueJS を使用していvue-router
ます。ストアに変更を加えるモジュールがありvuex
、それを使用してユーザーが認証されているかどうかを判断しようとしています。
これが私のコードが関連する部分でどのように見えるかです。
main.js
import Vue from 'vue'
import App from './App.vue'
import store from './store'
import router from './router'
router.beforeEach((to, from, next) => {
console.log(router.app) // prints a Vue$2 object
console.log(router.app.$store) // undefined
console.log(store.getters.isAuthenticated) // false
...
}
const app = new Vue({
store,
router,
...App
})
app.$mount('#app')
/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import core from './modules/core'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
core: core
}
})
export default store
/store/modules/core.js
import * as types from '../types'
import api from '../../api'
import router from '../../router'
const state = {
token: null,
user: null,
authenticated: false
}
const mutations = {
[types.LOGIN_SUCCESS] (state, payload) {
console.log('mutate')
state.token = payload.token
state.user = payload.user
state.authenticated = true
router.go('/')
}
}
const getters = {
isAuthenticated: state => {
return state.authenticated
}
}
const actions = {
[types.LOGIN] (context, payload) {
api.getToken(payload).then(response => {
context.commit(types.LOGIN_SUCCESS, response)
})
}
}
export default {
state,
mutations,
actions,
getters
}
アクションをトリガーするロジックを実行すると、ミューテーションが適切に実行されたことを確認できます。また、Chrome 拡張機能を使用してモジュールLOGIN
の vuex の状態を表示すると、 との状態が適切にミューテーションされています。core
user
authenticated
質問
このモジュールは、ルーターが.beforeEach
ループ内で実行されるまでにロードされていないようです。これは本当ですか?
はいの場合、この状況に対処する方法について、他にどのような提案がありますか? いいえの場合、私は何を間違っていますか?