Javascript 在另一个模块操作中获取vuex模块状态
我对vuex商店组件有点困惑 如何获取另一个模块的状态? 我尝试了不同的方法从存储中获取数据,并且总是得到Observer对象。向观察者敲打的正确方法是什么 如果我试图直接从这个对象获取任何东西,比如Javascript 在另一个模块操作中获取vuex模块状态,javascript,vue.js,vuejs2,vuex,Javascript,Vue.js,Vuejs2,Vuex,我对vuex商店组件有点困惑 如何获取另一个模块的状态? 我尝试了不同的方法从存储中获取数据,并且总是得到Observer对象。向观察者敲打的正确方法是什么 如果我试图直接从这个对象获取任何东西,比如rootState.user.someVariable,那么我会得到未定义的响应 从组件获取状态没有问题 编辑。添加代码 用户模块 import * as Constants from './../../constants/constants' import * as types from '..
rootState.user.someVariable
,那么我会得到未定义的响应
从组件获取状态没有问题
编辑。添加代码
用户模块
import * as Constants from './../../constants/constants'
import * as types from '../mutation-types'
import axios from 'axios'
const state = { user: [] }
const getters = {
getUser: state => state.user
}
const actions = {
getUserAction ({commit}) {
axios({method: 'GET', 'url': Constants.API_SERVER + 'site/user'})
.then(result => {
let data = result.data
commit(types.GET_USER, {data})
}, error => {
commit(types.GET_USER, {})
console.log(error.toString())
})
}
}
const mutations = {
[types.GET_USER] (state, {data}) {
state.user = data
}
}
export default { state, getters, actions, mutations }
突变
export const GET_LANGS = 'GET_LANGS'
export const GET_USER = 'GET_USER'
贮藏
主应用程序
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store/index'
Vue.config.productionTip = false
new Vue({
el: '#app',
router,
store,
template: '<App/>',
components: { App }
})
从“Vue”导入Vue
从“./App”导入应用程序
从“./路由器”导入路由器
从“./store/index”导入存储
Vue.config.productionTip=false
新Vue({
el:“#应用程序”,
路由器,
商店,
模板:“”,
组件:{App}
})
朗模块,这是我试着去商店的地方
import * as types from '../mutation-types'
import {axiosget} from '../../api/api'
const state = { langList: [] }
const getters = {
getLangs: state => state.langList
}
const actions = {
// this two action give me similar result
getLangsAction (context) {
axiosget('lang') // described below
},
getAnotherLangsAction (context) {
console.log(context.rootState.user) <----get Observer object
}
}
const mutations = {
[types.GET_LANGS] (state, {data}) {
state.langList = data
}
}
export default { state, getters, actions, mutations }
import*作为“../types”中的类型
从“../../api/api”导入{axiosget}
const state={langList:[]}
常量getters={
getLangs:state=>state.langList
}
常量动作={
//这两个动作给了我类似的结果
getLangsAction(上下文){
axiosget('lang')//如下所述
},
getAnotherLangsAction(上下文){
console.log(context.rootState.user){
if(actionError&&actionError==='function'){
//实施这个
}
})
}
如果我通过计算属性中的MapGetter获取状态,就不会有问题
<template>
<div>
{{user.access_token.token}}
</div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'ArticlesList',
computed: mapGetters({
user: 'getUser'
}),
created () {
this.$store.dispatch('getLangsAction')
this.$store.dispatch('getAnotherLangsAction')
}
}
</script>
{{user.access_token.token}
从“vuex”导入{mapGetters}
导出默认值{
名称:'ArticleList',
计算:mapGetters({
用户:“getUser”
}),
创建(){
此.$store.dispatch('getLangsAction'))
此.$store.dispatch('getAnotherLangsAction'))
}
}
我在这段代码中尝试做的是——在主站点中获取用户访问令牌(登录后),所有进一步的数据操作都将通过api主机生成。假设您希望从Vuex存储模块
user.js中的对象userDetails
获取属性userId
userDetails:{
userId: 1,
username: "Anything"
}
您可以在操作
authenticateUser(vuexContext, details) {
userId = vuexContext.rootState.user.userDetails.userId;
}
注意:在rootState
之后和文件名user
之前,如果存储模块文件位于嵌套文件夹中,请添加其路径。Definemodule
。您没有给我们提供太多的信息,您能提供一个您想要的示例,而不是一些控制台日志的屏幕截图……可能是rootState>代码>应该可以工作。向我们展示使用rootState
失败的代码。
userDetails:{
userId: 1,
username: "Anything"
}
authenticateUser(vuexContext, details) {
userId = vuexContext.rootState.user.userDetails.userId;
}