javascript - vuejs 无法在导航栏中获取 vuex 值
问题描述
我正在尝试在导航栏中验证我的用户,但它返回
[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘类型’”
App.vue
(路线的主要组成部分)
<router-view id="content" :user="user" :currency="currency" :key="$route.fullPath"></router-view>
///////
methods: {
currency() {
this.$store.dispatch('currency')
},
user() {
this.$store.dispatch('user')
},
}
store.js
state: {
user: {},
currency: {}
},
mutations: {
currency(state, currency){
state.currency = currency
},
user(state, user){
state.user = user
}
},
actions: {
user({commit}){
return new Promise((resolve, reject) => {
commit('user')
axios.get('/api/auth/user', {
headers: {
Authorization: 'Bearer ' + localStorage.getItem('access_token')
}
})
.then(resp => {
const user = resp.data
commit('user', user)
resolve(resp)
})
.catch(err => {
commit('user')
reject(err)
})
})
},
getters: {
isLoggedIn: state => !!state.token,
loggedUser: state => state.user,
currency: state => state.currency,
}
navBar.vue
<li v-if="isLoggedIn && this.$store.getters.loggedUser.type == 'admin'" class="nav-item dropdown">
...
</li>
///////
export default {
props:['currency', 'user'],
name: 'navbar',
data() {
return {
userPhoto: '',
site_name: process.env.MIX_APP_NAME
}
},
computed : {
isLoggedIn() {
return this.$store.getters.isLoggedIn
}
},
}
现在,即使在导航栏本身,如果我这样做{{this.$store.getters.loggedUser.type}}
,它也会打印我正在寻找的内容,但因为它<li>
会返回错误。
任何想法?
解决方案
在导航栏中放置一个上限条件。我不确定是否仍然适用于你的。像这样
<template v-if="$store.getters.loggedUser">
<li v-if="isLoggedIn && $store.getters.loggedUser.type == 'admin'" class="nav-item
dropdown">
...
</li>
</template>
另一方面。我对它所做的是我为loggedUser 类型分离了另一个状态。这似乎不是一个好方法,但它会帮助你。
如果您要为此创建一个单独的状态,那么现在您必须通过此调用它
<li v-if="isLoggedIn && $store.getters.loggedUser_type == 'admin'" class="nav-item
dropdown">
推荐阅读
- c# - 从 Azure 下载 blob 图像
- vb.net - 如何将文本的颜色从某个字符更改为行尾
- mysql - 执行准备好的语句的参数数量不正确 - Python / MySQL
- gentics-mesh - 网格中废弃 tmp 文件的问题
- elasticsearch - Fluentbit Kubernetes - 如何从现有日志中提取字段
- mysql - 获取每个日期的最新行
- git - 直接提交子目录中的更改
- haskell - 在 Haskell 中不使用 + 运算符将两个数字相加
- sql - 如何使用嵌套在 OR 中的多个 AND 条件来索引 SQL
- html - 自定义 window.print()