Vuex getters-properties使用vue-router时出现故障 - 它们无法被激活

Sam*_*how 5 vue.js vue-router

首先,有 user.js,这是其中一个模块store.js

const state = {
  isLogin: false
}

const mutations = {
  login(state, userid){
    state.userid = userid;
  }
}

export default {
  state,
  mutations
}
Run Code Online (Sandbox Code Playgroud)

使用Vue-router,我创建了一个App Component,然后导入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>
Run Code Online (Sandbox Code Playgroud)

我注意到该方法btnClick可以在这个组件中工作.它确实改变了store.state.user.isLogin.

但这是另一个a.vue听取isLogin状态的组件:

<template>
...
  <a
    v-if="isLogin" 
    v-link="'#'">
    ...
  </a>
...
</template>

<script>
// import something
export default {
    vuex: {
      getters: {
        isLogin: ({ user }) => user.isLogin
      }
    }
}
</script>
Run Code Online (Sandbox Code Playgroud)

btnClick切换中login.vueisLogin改变.但似乎是,尽管吸isLogina.vue改变的时候,v-if<a>没能成为反应,对于<a>没有出现.

我试图测试是否store注入了子组件,结果是它已经通过.此外,我试图使用computed而不是gettersisLogin,它也没有被反应.当添加isLoginwatch属性,它未能观看.

有一件事我很确定 - Vue.use(Vuex)不会错过.

我想知道是否是Vue-router导致问题的原因.
而且似乎没有一个人询问的问题vuexvue-router...

Yer*_*lma 1

我正在使用vuexand (如果您正在验证用户身份vue-routervue-resource我假设您正在发出 HTTP 请求)并且它工作得很好。

我认为你的问题是你的 getter 声明。Getter 接收对象state内部store,并且在您的商店声明中我没有看到该isLogin选项是 的属性user。我会把你的 getter 改成这个。

vuex: {
  getters: {
    isLogin: state => state.isLogin
  }
}
Run Code Online (Sandbox Code Playgroud)