Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绑定复选框并使用vuex store和vuejs将所选项目添加到阵列中_Javascript_Vue.js_Checkbox_Vuex - Fatal编程技术网

Javascript 绑定复选框并使用vuex store和vuejs将所选项目添加到阵列中

Javascript 绑定复选框并使用vuex store和vuejs将所选项目添加到阵列中,javascript,vue.js,checkbox,vuex,Javascript,Vue.js,Checkbox,Vuex,在我的应用程序中,有一个项目数组。我正在显示这些项目以及复选框。现在,我想将这些复选框状态(勾选/取消勾选)与vuex store绑定,以获取所选项目 Vuex操作代码片段: const actions:Actions = { changeCheckProducts({ state, commit, dispatch}, payload) { const { value, data } = payload const index = state.products.find

在我的应用程序中,有一个项目数组。我正在显示这些项目以及复选框。现在,我想将这些复选框状态(勾选/取消勾选)与vuex store绑定,以获取所选项目

Vuex操作代码片段:

const actions:Actions = {
    changeCheckProducts({ state, commit, dispatch}, payload) {
    const { value, data } = payload
    const index = state.products.findIndex(
      item => item.id === data.id
    )
    if (index === -1) {
      return
    }
    commit('CHANGE_CHECK_PRODUCTS_DETAILS', { index, value })
    dispatch('addSelectedItems', {data})
  },
 addSelectedItems({commit, state} ,payload) {
   // How will i do that ??
  state.newArray.push(payload.id)
 commit('ADD_SELECTED_ITEMS', payload)
 },
}
const mutations: Mutations = {
    CHANGE_CHECK_PRODUCTS_DETAILS(state, payload) {
    const { index, value } = payload
    state.products[index].checked = value
  },
   ADD_SELECTED_ITEMS(state, payload) {
    // how to add selected items to a new array state
   },
}
    onSelectedItems(data) {
    this.$store.dispatch('changeCheckProducts', data)
  }

I have tried many things to implement this means to store checked items and updating the array if unchecked some items and checked other items. I am new to vuex.Please help me on this.
 I know there is some problems in my store. Please suggest me on this
存储变异代码片段:

const actions:Actions = {
    changeCheckProducts({ state, commit, dispatch}, payload) {
    const { value, data } = payload
    const index = state.products.findIndex(
      item => item.id === data.id
    )
    if (index === -1) {
      return
    }
    commit('CHANGE_CHECK_PRODUCTS_DETAILS', { index, value })
    dispatch('addSelectedItems', {data})
  },
 addSelectedItems({commit, state} ,payload) {
   // How will i do that ??
  state.newArray.push(payload.id)
 commit('ADD_SELECTED_ITEMS', payload)
 },
}
const mutations: Mutations = {
    CHANGE_CHECK_PRODUCTS_DETAILS(state, payload) {
    const { index, value } = payload
    state.products[index].checked = value
  },
   ADD_SELECTED_ITEMS(state, payload) {
    // how to add selected items to a new array state
   },
}
    onSelectedItems(data) {
    this.$store.dispatch('changeCheckProducts', data)
  }

I have tried many things to implement this means to store checked items and updating the array if unchecked some items and checked other items. I am new to vuex.Please help me on this.
 I know there is some problems in my store. Please suggest me on this
组件代码片段

<ul >
              <li aria-expanded="false"
                v-for="file in products"
                :key="file.id">
                <span>
                  <input type="checkbox"
                         :id="file.id"
                         :value="file.id"
                         v-model="checkedItems"
                         @change="onSelectedItems"/>
                  <span class="doc_input">
                    <i class="el-icon-document" aria-hidden="true"></i>
                  </span>
                  <span class="product__name">
                    {{file.name}}
                  </span>
                </span>
              </li>
            </ul>

修改方法如下:

onSelectedItems() {
  this.$store.dispatch('changeCheckProducts', this.checkedItems)
  // this.checkedItems looks like [1, 2, 3], each of which is ID of the selected product
}
您的Vuex商店:

changeCheckProducts({ commit }, payload) {
    commit('CHANGE_CHECK_PRODUCTS_DETAILS', payload)
    ...
}

...

// States should be handled in mutation only.
CHANGE_CHECK_PRODUCTS_DETAILS(state, payload) {
    state.products.forEach(product => {
        if (payload.indexOf(product.id) > -1) {
            product.checked = true
        }
    })
},

任何人都可以在这方面提供帮助。任何建议都将非常有用helpful@State(state=>state.productStore.products)产品。。。。在我的产品列表组件中检查我的答案,并让我知道它是否有效。