iview如何在table列表中使用Switch开关功能并实现点击发送网络请求

问题:平时我们使用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('失败')
              }
            });
          }
        });
      });
    },

以下是一个使用 iView TableSwitch 组件联合使用的示例,同时将 Switch 组件的值加入到 Table 的 selection 中: ```html <template> <Table :data="tableData" :columns="columns" :row-selection="rowSelection"></Table> </template> <script> export default { data () { return { tableData: [ { name: '张三', age: 24, married: false }, { name: '李四', age: 26, married: true }, { name: '王五', age: 27, married: false } ], columns: [ { title: '姓名', key: 'name' }, { title: '年龄', key: 'age' }, { title: '婚姻状况', key: 'married', render: (h, params) => { return h('Switch', { props: { value: params.row.married }, on: { 'on-change': (value) => { params.row.married = value; this.updateSelection(); } } }); } } ], rowSelection: { onChange: (selectedRows) => { this.selectedRows = selectedRows; }, selectedRowKeys: [] } }; }, methods: { updateSelection () { this.rowSelection.selectedRowKeys = this.tableData.filter(item => item.married).map(item => item.key); } } }; </script> ``` 在上面的示例代码中,我们在 Table 的 columns 中使用Switch 组件,监听了其 on-change 事件。当 Switch 组件的选中状态发生改变时,我们将其选中状态的值加入到 Table 的 selection 中。具体来说,我们在 on-change 事件中,更新了当前行数据的 married 属性,调用了 updateSelection 方法,该方法会根据当前表格数据中 married 为 true 的行,更新 rowSelection 中的 selectedRowKeys 属性。最终,我们可以通过监听 Table 的 onChange 事件,获取到 selection 中的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值