el-table和el-switch结合使用无法切换问题解决

 因为学习需要,所以在使用vue的时候借用element-ui的组件,在使用组件element-table和element-switch两则相互结合后,出现了点击switch触发了change方法,值也确实发生了改变。

       但效果没有发生变化。

       首先是问题发生的原因:

       我实现的change方法如下:

change(state){
  this.datas[1].State=false;
  console.log(state);
},

直接打印当前值。

 

界面效果如下图:

也就是说v-model绑定的结果一直为true,因为是使用table,所以绑定值的代码如下:

<el-table-column
  label="账号状态"
  width="140">
  <template slot-scope="scope" >
  <el-switch
    style="display: block;"
    v-model="scope.row.State"
    @change="change(scope.row.State)"
    active-color="#13ce66"
    inactive-color="#ff4949"
    active-text="启用"
    inactive-text="禁用">
  </el-switch>
</template>
</el-table-column>

       多次点击图标,显示结果如下。

通过在浏览器上面点击操作可以看见,也就是说虽然触发了change,change也把值的结果变了,但是始终展现的为true,同时改变的值不为v-model绑定的值。

 

因此,我决定同时打印table绑定的data和scope的state,观察两个结果是否有差异,运行结果如下:

结果一致,两则指向的值一样,但switch效果未发送变化,但是switch一次改变了相应的值。但是界面没有表示,首先需要确认是否table能够让switch失效,因此我让v-model绑定一个自定义值的数组。

test:[{'value':false}],

 

如上设置,并绑定到v-model.

点击后:

确实是发送了变化,因此可以证明switch能够正常工作。我将结果绑定为指定index的值。因此,可以判断是table的值未进行更新,我发现当改变

<el-table-column
  prop="sex_sta"
  label="性别"
>

如上所示el-table-column的值时,它的表格会动态刷新。

然后经过多次练习我发现规律如下:

this.datas=response.data.data;
this.datas.forEach(element=>{
  element.State=element.state!==0;
  element.user_state=element.state===0?'禁用':'启用';
  element.sex_sta=element.sex===0?'女':'男';
});

当你在对datas的某个变量赋值后再更改,如上两次以上修改在一个方法里面。在表格上会显示最后一次的值,但是第三次修改该变量的值时,系统无法检测表格的值是否发生变化。默认没有发生变化,因此针对上述情况,先将值修改完后再进行赋值操作,同时将switch组件所在的el-table-column的prop绑定具体的值,只有这样,才能检测到表格是否被修改。

总结,el-table通过绑定prop值检测表单内容的修改,同时在一个方法进行多次对表单值的修改会导致【即多次对所绑定的变量进行赋值】默认该变量没有被修改。

不清楚这个到底是bug还是我对el-table的理解不够深入。

不过,能够解决就可以了。

Vue.js中使用Element UIel-table组件时,如果想在el-table-column中单独控制el-switch的状态,可以通过以下步骤实现: 1. **使用`:prop`绑定数据**:首先,确保你的表格数据是一个数组对象,每个对象包含一个属性来表示开关的状态。 2. **使用`:value``@change`事件**:在el-switch组件上使用`:value`绑定当前行的开关状态,并使用`@change`事件来更新状态。 3. **使用`row`对象**:在事件处理函数中,通过`row`对象来更新对应的数据。 以下是一个具体的示例代码: ```html <template> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名" width="180"></el-table-column> <el-table-column label="状态" width="180"> <template slot-scope="scope"> <el-switch v-model="scope.row.status" @change="handleSwitchChange(scope.row)" active-color="#13ce66" inactive-color="#ff4949"> </el-switch> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', status: true }, { name: '李四', status: false }, { name: '王五', status: true } ] }; }, methods: { handleSwitchChange(row) { // 在这里处理开关状态变化后的逻辑 console.log(`用户 ${row.name} 的状态已更改为 ${row.status}`); // 你可以在这里发送请求到服务器更新状态 } } }; </script> ``` 在这个示例中,`el-table`组件的`data`属性绑定到`tableData`数组。每个`el-table-column`列都通过`prop`属性绑定到对象的属性。`el-switch`组件的`v-model`绑定到当前行的`status`属性,并通过`handleSwitchChange`方法处理状态变化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值