Vue.js 使用vue路由器时Vuex Getter属性失败-它们无法响应
首先是Vue.js 使用vue路由器时Vuex Getter属性失败-它们无法响应,vue.js,vue-router,Vue.js,Vue Router,首先是user.js,它是store.js const state = { isLogin: false } const mutations = { login(state, userid){ state.userid = userid; } } export default { state, mutations } 使用Vue路由器,我创建了一个应用程序组件,并导入了store.js 然后是组件login.vue。以下是代码的一部分: <script&g
user.js
,它是store.js
const state = {
isLogin: false
}
const mutations = {
login(state, userid){
state.userid = userid;
}
}
export default {
state,
mutations
}
使用Vue路由器,我创建了一个应用程序组件,并导入了store.js
然后是组件
login.vue
。以下是代码的一部分:
<script>
export default {
vuex: {
actions: {
login // this action changes the state of
// isLogin by dispatch `login` mutation
}
},
methods: {
btnClick(){
// here calls the login action
}
}
}
</script>
当b单击在login.vue
中切换时,isLogin
更改。但是看起来,虽然a.vue
中的getterisLogin
已更改,但是
中的v-if
无法反应,因为
没有出现
我试着测试store
是否被注入子组件,结果是它已经通过。另外,我尝试使用computed
而不是getters
来侦听isLogin
,但也没有反应。在watch
属性中添加isLogin
时,它无法监视
有一件事我非常确定,Vue.use(Vuex)
不会错过
我想知道是否是Vue路由器
导致了问题。
而且似乎没有人问过关于vuex
和vue路由器的问题 我正在使用vuex
与vue路由器
和vue资源
(如果您正在验证用户,我假设您正在发出HTTP请求),它工作正常
我认为你的问题在于你的getter宣言。getter在存储
对象内接收状态
,在存储声明中,我看不到isLogin
选项是用户
的属性。我会把你的getter换成这个
vuex: {
getters: {
isLogin: state => state.isLogin
}
}
您是否在任何地方更新isLogin?通过在名为userid
的state
上设置一个不存在的属性,而不是在任何地方设置state.isLogin,可以登录用户。我不知道设置未声明的属性是否有效,而且通常在Vue中,必须从一开始就声明一个变量才能响应。应该是这样的:
const state = {
isLogin: false,
userid:0
}
const mutations = {
login(state, userid){
state.userid = userid;
state.isLogin = true;
}
}
正如杰夫所说,对于我的问题,我也制作了一个模块,所以我们必须这样制作
state.user.isLogin
我认为,当您进行模块化Vuex构建时,正如他在这里所做的那样,模块本身将成为状态的属性。因此,由于它是一个名为user
的模块,因此它确实成为了state的属性,isLogin
属性将位于state.user.isLogin
。这只是我愚蠢的错误。现在它工作了!谢谢,谢谢你的回答。到目前为止,我已经解决了这个问题。正如你所看到的,我只是犯了一个愚蠢的错误。
const state = {
isLogin: false,
userid:0
}
const mutations = {
login(state, userid){
state.userid = userid;
state.isLogin = true;
}
}