Vue에서 반복 테이블 행의 확인란 값을 배열로 전달하는 방법은 무엇입니까?
데이터베이스에서 데이터를 가져와 데이터를 전달합니다.<tbody>
줄들 사이를 순환하면서 말입니다.행이 하위 구성 요소 내에 있는 동안<tbody>
가져오기:
<template>
<tr>
<td>{{id}}</td>
<td>{{indId}}</td>
<td><input type="checkbox" :value="id" v-model="values">...</td>
</tr>
</template>
<script>
import { mapActions } from 'vuex'
export default {
data() {
return {
values: []
}
},
props: {
id: {
type: String,
reuired: true
},
indId: {
type: String,
reuired: true
},
methods: {
...mapActions([
'selectValues'
])
},
beforeUpdate(){
this.selectValues(this.values)
}
}
</script>
"id"는 고유하므로 "values" 배열에서 선택한 행(확인란)을 나타내야 합니다.그런 다음 Vuex에서 작업을 변환하여 "값"을 저장합니다.beforeUpdate()
라이프사이클 후크 및 내 앱의 모든 곳에서 이 상태를 사용할 수 있는 게터를 정의합니다.다른 한편으로는 이 하위 구성 요소를 가져와 배열 "tableBody"에서 데이터를 전달하고 있습니다.이와 같이:
<template>
<table class="data-table">
<tbody>
<tableBody
v-for="body in tableBody" :key="body.id"
:id="body.id"
:indId="body.ind_id"
/>
</tbody>
</table>
</template>
<script>
import tableBody from './TableParts/TableBody'
export default {
components: {
tableBody
},
props: {
tableBody: {
type: Array,
required: true
}
}
}
</script>
다음은 store.js 파일의 상태, 변환, 액션 및 getter입니다.
import Vuex from "vuex";
import axios from "axios";
const createStore = () => {
return new Vuex.Store({
state: {
selectedValues: []
},
mutations: {
selectValues(state, payload){
state.selectedValues = payload;
}
},
actions: {
selectValues({commit}, payload){
commit('selectValues',payload)
}
},
getters: {
selectedValues(state){
return state.selectedValues;
}
}
});
};
export default createStore;
문제는 이 모든 것들이 "값" 배열의 실제 행에 "id" 값을 저장한다는 것입니다.다섯 개의 행을 선택한 경우 마지막으로 선택한 행의 값을 가진 길이가 1인 배열이 "값"입니다.하지만 이 배열을 선택한 모든 행의 값으로 채우는 것이 필요합니다.반복을 통해 완벽하게 작동하는 몇 가지 예를 보았습니다.<li>
에<ul>
혹시 제가 사용하는 HTML 태그에 따라 다를 수도 있나요?내가 무엇을 잘못하고 있고 어떻게 고칠 수 있는지 알면 좋을 것 같습니다.
values
당신의tableBody
구성 요소는 로컬 데이터이므로 행 간에 공유되지 않습니다.
vuex에 데이터를 저장하려는 경우 다음과 같이 구현하는 것이 좋습니다.
<template>
<tr>
<td>{{id}}</td>
<td>{{indId}}</td>
<td><input type="checkbox" :value="id" :checked="isSelected" @click="toggleValue">...</td>
</tr>
</template>
<script>
import { mapActions, mapState } from 'vuex'
export default {
props: {
id: {
type: String,
reuired: true
},
indId: {
type: String,
reuired: true
},
methods: {
...mapActions([
'selectValues',
'deselectValues'
]),
toggleValue() {
if (!this.isSelected) {
this.selectValues(this.id)
} else {
this.deselectValues(this.id)
}
}
},
computed: {
...mapState(['selectedValues']),
isSelected () {
return this.selectedValues && this.selectedValues.includes(this.id)
}
}
</script>
선택한 모든 행을 돌연변이에 저장하려면 배열을 다시 할당하는 대신 콘캐트해야 합니다.
selectValues(state, payload){
state.selectedValues = state.selectedValues.concat([payload])
}
deselectValues (state, payload) {
state.selectedValues = state.selectedValues.filter(item => item !== payload)
}
언급URL : https://stackoverflow.com/questions/50444585/how-to-pass-down-checkbox-values-from-an-iterating-table-row-to-an-array-in-vue
'programing' 카테고리의 다른 글
Firebase 스토리지 비디오 스트리밍 (0) | 2023.07.19 |
---|---|
matplotlib 플롯의 왼쪽 위 모서리에 텍스트 삽입 (0) | 2023.07.19 |
16진수를 인쇄할 때 printf가 1바이트만 출력하지 않는 이유는 무엇입니까? (0) | 2023.07.19 |
변수가 정의되었는지 확인하시겠습니까? (0) | 2023.07.19 |
몽구스에서 랜덤 레코드를 찾는 방법 (0) | 2023.07.14 |