【发布时间】:2020-01-24 09:23:35
【问题描述】:
我正在尝试在导航栏中验证我的用户,但它返回
[Vue 警告]:渲染错误:“TypeError:无法读取属性 'type' 未定义”
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> 中,它会返回错误。
有什么想法吗?
【问题讨论】:
-
尝试删除模板中的
this。所以只需$store.getters... -
@Dan 结果相同 :(
-
能否调试一下 store 动作
user并确认响应是否确实返回了正确的数据? -
@mafortis 不要内联,因为它必须设置状态 1,然后吸气剂你可以放一些延迟或尝试其他一些姿势
-
@YomS。正如我所说,我已在导航栏中打印它并返回我正在寻找的数据,并且显示受此保护的链接,这意味着
$store.getters.loggedUser.type == 'admin是真的,但我得到了错误
标签: javascript vue.js vuejs2 vue-router