vue.js - 如何将单选按钮绑定(bind)到 vuex 商店?

标签 vue.js vuex

我想将一组单选按钮的值单向绑定(bind)到我的模型,并在发生变化时更新 vuex 存储。不幸的是,这似乎没有在任何地方记录。任何帮助将不胜感激。

双向绑定(bind)按照记录工作:

<input type="radio" name="info-source" value="1" id="info-source-1" v-model="infoSource">
<label for="info-source-1">TV</label>
<input type="radio" name="info-source" value="2" id="info-source-2" v-model="infoSource">
<label for="info-source-2">Social media</label>

但是在这种情况下 vuex 开始提示 不要在突变处理程序之外改变 vuex 存储状态

最佳答案

如警告所述,您不能在变异方法之外修改 Vuex 状态对象的值。

您可以创建一个具有 get/set 方法的计算属性来引用/更新 Vuex 存储中相关数据的状态。

这是一个简单的例子:

const store = new Vuex.Store({
  state: {
    gender: 'female',
  },
  mutations: {
    SET_GENDER(state, gender) {
      state.gender = gender;
    }
  }
});

new Vue({
  el: '#app',
  store,
  computed: {
    gender: {
      get() {
        return this.$store.state.gender;
      },
      set(value) {
        this.$store.commit("SET_GENDER", value);
      }
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/2.3.1/vuex.min.js"></script>
<div id="app">
  <input type="radio" name="gender" value="male" v-model="gender">Male<br>
  <input type="radio" name="gender" value="female" v-model="gender">Female<br>
  <input type="radio" name="gender" value="other" v-model="gender">Other<br>
  Vuex store value: {{ $store.state.gender }}<br>
  Computed property value: {{ gender }}
</div>

关于vue.js - 如何将单选按钮绑定(bind)到 vuex 商店?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45841180/

相关文章:

javascript - 无法让 Firebase 数据在简单的 Vue 应用程序上显示

javascript - Nuxt.js:窗口未定义

vue.js - 是否可以在 Vue 实例启动时在 Vuex 内部调度一个 Action ?

javascript - 如何更改 `this` 调用 Vue 实例方法的上下文?

javascript - 带有 vue.js 的简单 html 不起作用

vue.js - NuxtJS 更改查询参数并重新加载页面

vue.js - VueJs : Form handling with Vuex and inputs generated with an API

Vuex Getters 方法样式如何返回函数

vue.js - vue-socket.io 如何连接多个 websocket 服务器

javascript - 如何根据存在的数据编辑模板?