Tôi đang sử dụng VueJS kết hợp với vuex
và vue-router
. Tôi có một mô-đun vuex
đang tạo đột biến cho cửa hàng của mình và cố gắng sử dụng để xác định liệu người dùng có được xác thực hay không.Chuyển trạng thái mô-đun vuex vào vue-router trong beforeEach
Đây là mã của tôi trông như thế nào trong phần liên quan.
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
}
Khi Tôi đi qua logic của mình để kích hoạt hành động LOGIN
, tôi có thể thấy rằng đột biến được thực thi đúng cách và khi tôi sử dụng tiện ích Chrome để xem trạng thái vuex cho mô-đun core
của mình, trạng thái cho user
và authenticated
đã bị tắt tiếng đúng cách.
HỎI
Nó có vẻ như module này chỉ đơn giản là chưa được nạp vào lúc router đang chạy trong .beforeEach
vòng lặp. Điều này có đúng không?
Nếu có, một số đề xuất khác về cách xử lý tình huống này là gì? Nếu không, tôi đang làm gì sai?
những gì bạn nhận được nếu bạn đăng nhập 'store.state.core.authenticated'? –
@francoisromain 'console.log (store.state.core.authenticated)' trả về 'false' –
Tôi nghĩ rằng tôi đã tìm ra được vấn đề. Nhưng, cho đến khi tôi nghiên cứu thêm một chút ... Tôi sẽ không đăng câu trả lời của riêng tôi. Có vẻ như nhà nước không liên tục và không sử dụng một thứ gì đó như HTML5 localstorage. Do đó, trên mỗi lần tải trang, trạng thái trống. Vì vậy, tôi cần phải di chuyển người dùng của tôi vào localstorage (hoặc một số tương đương) để có được loại kiên trì đó. Tôi có một giải pháp khả thi, và sẽ đăng nó khi tôi chắc chắn hơn rằng đây là phương pháp tốt nhất. –