问题:平时我们使用iview中的Switch开关,都是通过双向绑定实现数据的改变,但是我们经常会在表格中用到Switch,并希望实现点击Switch时实现网络请求的功能
为了实现网络请求这种延时操作,我们最好使用iview提供的Switch的**before-change**事件来拦截Switch选中事件,方法有了,但是实现时发现这个方法无法传参(甚至在布局中调用时都不能加空括号),也就是无法获取我们需要请求接口的id值,这时为了获取到id,我们必须在执行before-change之前获取到id,这里可以用mousedown事件在before-change之前储存所点击数据源的row对象或者直接保存row的id值,以方便后续修改此条数据
在table标签中使用插槽i-switch标签,并设置@mousedown.native
<template slot="status" slot-scope="{ row }">
<i-switch v-model="row.status===1"
@mousedown.native="setCurrentRow(row)"
:before-change="useOrClose"></i-switch>
</template>
然后在方法中设置当前要修改的数据行值
setCurrentRow(row){
this.currentRow = row
},
最后在before-change中,通过控制返回Promise来阻断Switch开关,然后判断接口是否成功来操作是否放行开关改变
useOrClose(){
let lthis = this
console.log(status)
return new Promise((resolve) => {
this.$Modal.confirm({
title: '切换确认',
content: '您确认要切换开关状态吗?',
onOk: () => {
let obj = {
id:lthis.currentRow.id,
status:lthis.currentRow.status == 1 ? 0:1
}
this.$post("/courseClass/edit", obj).then((res) => {
if (res.code == 200){
this.$Message.success("成功")
resolve();
} else {
this.$Message.error('失败')
}
});
}
});
});
},