vue中checkbox回填与获取选中的值

本文介绍如何使用Vue.js实现从数据库读取的数据自动选中checkbox,同时处理用户操作后的数据更新并保存回数据库。通过实例展示了如何设置v-model绑定、遍历数据及处理用户交互的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目用到了checkbox控件,需要从数据库获取数据,并且有的数据从数据库读取出来后就是选中状态的,在页面中选中数据后在保存到数据库中。

以下是全部代码



        <label v-for="item in UserRoleList" v-bind:key="item.rId">

           <input name="roles" type="checkbox" :value="item.rId" :disabled="item.isDisabled" v-model="checkVal"/>{{item.roleName}}

        </label>

          <el-button type="primary" @click="updateUser">确定</el-button>


说明:v-model="checkVal"  checkbox会根据checkVal中的值默认选中数据,checkVal必须是数组

以下是javascript部分

data () {

    return {

      updateUid:'',  //修改的用户Id

      checkVal:[],  //checkbox选择角色回填和选中的值

    }

  }
created() {
    this.getRoleList()  //加载select中角色信息
  },
methods: {

 //编辑角色获取用户角色接口

    getUserRoles(userid){

      this.$axios.post('',{uId:userid},{headers: {

        accessToken: util.cookies.get('token')

      }}).then(res=>{

        this.UserRoleList=res.roleList;  //加载全部数据

        this.checkVal=[];

        this.UserRoleList.forEach(i=>{

          if(i.isChecked){  //根据此字段判断页面中的checkbox是否选中,如果选中放到checkVal数组中

            this.checkVal.push(i.rId);

          }

        })

      })

    }

},

    //修改用户

    updateUser(){

      if(this.updateUid==""){

        this.$message({type:'error',message:'请选择用户'})

        return;

      }

      if(this.checkVal.length==0){

        this.$message({type:'error',message:'请选择角色信息'})

        return;

      }

    // 修改时这里可以获取到checkbox中全部选中的值

      this.$axios.post('',{uId:this.updateUid,roleIds:this.checkVal.join(',')},{

        headers: {

            accessToken: util.cookies.get('token')

            }

      }).then(res=>{

        if(res>0){

          this.$message({type:'success',message:'修改成功'});

        }

      })

    }

### 实现Element UI `el-table` 中点击输入框弹出选择人员的弹窗并回填 为了实现在 Element UI 的 `el-table` 组件中集成弹窗组件以选择人员并将选中结果填充到对应的输入框,可以按照以下方式构建: #### HTML 结构 定义表格列时,在需要显示输入框的位置使用自定义模板来嵌入带有事件监听器的输入控件。 ```html <template> <div> <!-- 表格 --> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-input v-model="scope.row.personnelInfo" readonly @focus="openPersonnelSelector(scope.$index)"> </el-input> </template> </el-table-column> </el-table> <!-- 选择人员对话框 --> <el-dialog title="选择人员" :visible.sync="dialogVisible" width="30%"> <el-tree ref="personTree" :data="personnelOptions" show-checkbox node-key="id" default-expand-all></el-tree> <span slot="footer" class="dialog-footer"> <el-button type="primary" @click="confirmSelection">确 定</el-button> </span> </el-dialog> </div> </template> ``` #### JavaScript 部分逻辑处理 通过 Vue.js 方法管理状态变化以及交互行为。 ```javascript <script> export default { data() { return { tableData: [ { name: '张三', personnelInfo: '' }, { name: '李四', personnelInfo: '' } ], dialogVisible: false, currentRowIdx: null, // 记录当前聚焦行索引 personnelOptions: [] // 假设这是从服务器获取的人事结构化数据 }; }, methods: { openPersonnelSelector(index) { this.currentRowIdx = index; this.dialogVisible = true; // 这里模拟异步加载人事选项列表 setTimeout(() => { this.personnelOptions = [ { id: 1, label: '员工A' }, { id: 2, label: '员工B' } ]; }, 500); }, confirmSelection() { const selectedNodes = this.$refs['personTree'].getCheckedNodes(); if (selectedNodes.length === 0 || !this.currentRowIdx) return; let selectedNames = selectedNodes.map(node => node.label).join(', '); this.tableData[this.currentRowIdx].personnelInfo = selectedNames; this.dialogVisible = false; } } }; </script> ``` 上述代码展示了如何创建一个简单的界面用于展示表格,并允许用户点击特定单元格内的输入框触发弹窗选择人员。当选择了某些项之后,这些项目的名称会被组合成字符串形式赋给对应行的数据字段[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值