项目要求是这样的:
勾选某一行数据,合格数量,不合格数量变为输入框
遇到的问题:在使用iview的table组件,里面有个on-selection-change事件,只要按照以下以下就可以正常使用
<Row>
<Table
:loading="loading"
border
:columns="columns"
:data="data"
:height="tableHeight"
sortable="custom"
@on-sort-change="changeSort"
ref="table"
>
</table>
</Row>
换成自己的事件和自己的方法,然后方法返回的是已选中的数据,然后我就遍历选中数据,比较选中数据的uuid和表格数据data 的uuid 是否相同,是就直接将登记数量赋予给合格数量,但是在这个过程中,只要加了对data 的循环,就会导致勾选了三条数据,但是on-selection-change事件返回的只是当前点击的数据,并且勾选框会时不时的失效,点了之后勾勾还在
以下是之前的代码
// //选择数据
selectData(selection) {
this.changeData = []
this.changeData = selection
let uuids = this.changeData.map(item => item.uuid)
this.data.forEach(item => {
var qualifiedAmount = '';
let uuid = item.uuid;
if(uuids.some(i => i==uuid)){
qualifiedAmount = 100;
}
this.$set(item, "qualifiedAmount",qualifiedAmount)
});
},
然后在不停的踩坑,踩坑之后(试过了table的其他事件结合使用:,然后还试了偷梁换柱,将表格数据的data 换掉,也没办法赋值)但都不行
后来就想了另外一种办法
将勾选框改为checkBox 自定义,在export default {}中定义表格数据的时候
在methods: {}中进行重写
下面是全选
// 多选Checkbox
checkBoxRender(h, params, key) {
if (!key) {
key = 'uuid'
}
if (params.row['_checked'] == undefined) {
this.$set(params.row, '_checked', false)
}
let self = this
return h('div', [
h('Checkbox', {
props: {
value: params.row['_checked'],
},
on: {
'on-change': value => {
if (value) {
self.data[params.row['_index']].qualifiedAmount = params.row['totalCount'] //设置合格数
self.data[params.row['_index']].unqualifiedAmount = 0 //设置不合格数
console.log(self.data)
self.changeData.push(self.data[params.row['_index']]) //将选中的数据加入到返回数据中
} else {
self.data[params.row['_index']].qualifiedAmount = '' //设置合格数
self.data[params.row['_index']].unqualifiedAmount = '' //设置不合格数
self.changeData.forEach((item, index) => {
if (params.row['uuid'] == item['uuid']) {
//将选中的数据移除
self.changeData.splice(index, 1)
}
console.log('self.changeData')
console.log(self.changeData)
})
}
},
},
}),
])
},
checkBoxHeaderRender(h, params, key) {
let self = this
return h('div', [
h('Checkbox', {
props: {
value: false,
},
on: {
'on-change': value => {
if (value) {
self.data.forEach(row => {
row._checked = true
row.qualifiedAmount = row.totalCount
row.unqualifiedAmount = 0
self.changeData.push(row)
console.log(self.changeData)
})
} else {
self.data.forEach(row => {
row._checked = false
row.qualifiedAmount = ''
row.unqualifiedAmount = ''
self.changeData = []
console.log(self.changeData)
})
}
},
},
}),
])
},
因为自己比较菜,罗里吧嗦说了一堆,希望有所帮助