vue项目elementui 的 el-checkbox复选框改成单选框样式:实现全选、全否、单选、反选功能(最简单的方法)

我的需求是:需要单选功能,又想使用复选框的样式,自己又不想去自定义修改样式。所以可以使用如下的方法:

于是可以用js去控制选中的值,如果选中值的长度大于1,则每次只截取第二个数。因为选中值是从后面追加进去的。第二个数就是最新选中值。

我看网上有很多方法可以实现这个效果。但是我自己写的这个方法最简单。

单选功能:点击哪个就选中哪个

反选功能:再次点击同一个,就能实现反选功能

手动全否功能:目前这个代码、可以手动点击。全都不选就行了。

一键全选、全否功能(在文末)

效果:

代码:

 <el-form-item label="角色" :label-width="formLabelWidth">
          <el-checkbox-group v-model="someList.role">
            <el-checkbox v-for="(item,index) in roleList" :label="item" :key="index"
                         @change="handleCheckedRolesChange(item,someList)">{{ item }}
            </el-checkbox>
          </el-checkbox-group>
</el-form-item>
  data() {
    return {
      action: '', //当前行为,change(修改用户信息),add(新增用户)
      someList: [], //需要修改的某条用户数据
      roleList: ['管理员', '编辑', '编辑2', '编辑3', '编辑4'], //角色列表
      userlist: [
        {
          name: ' 测试账号1',
          account: 'abc111',
          password: '111',
          phone: '1234567890',
          role: ['编辑'],
          other: '其他备注',
          isDisable: 'true'
        }
        ]
}
}
    //角色单选
    handleCheckedRolesChange(item, someList) {
      if (someList.role.length > 1) {
        // someList.role=[]
        // this.$message.error('只能设置一种角色!');
        console.log(someList.role)
        let one = someList.role.splice(1)
        someList.role = one
        console.log(one)
      }
    }

大功告成!

以上就是代码就可以实现所要的功能了。


下面是知识补充:

Array.slice(start,end),

从start开始,end之前结束,不到end;如果不给end值,从start开始到数组结束。start可以给负值,-1表示数组最后位置,-2表示倒数第二个,以此类推,顾前不顾后。在数组中添加删除或替换元素
splice();在任意位置添加或删除元素,返回删除或被替换的值,如果没有被删除或替换则返回空数组;
splice()方法会修改原数组的值;
只有一个值时,从当前位置删除到数组末尾

let arr=[1,2,3,4,5];
let num1=arr.splice(1)
console.log(num1,arr)//num1=[2,3,4,5];arr=[1];

VM390:3 (4) [2, 3, 4, 5] [1]

关于js数组的常用方法。可以看看这篇文章:

JavaScript数组的常用方法总结:遍历,复制,反转,排序,添加,删除(前端常见面试题必考必问_勤动手多动脑少说多做厚积薄发-CSDN博客_js数组倒序输出1. Array.push()向数组的末尾添加一个或多个元素,并返回新的数组长度。原数组改变。一个:var fruits = ["Banana", "Orange", "Apple", "Mango"];var x=fruits.push("Kiwi");console.log(fruits)//(5) ["Banana", "Orange", "Apple", "Mango", "Kiwi"] console.log(x)//5 x是 新的数组长度多个:var fruits =https://blog.csdn.net/qq_22182989/article/details/120995392

 一键全选、全否功能:

如果想使用全选功能的话。elementui 有自带的全选、全否功能:

Element - The world's most popular Vue UI frameworkElement,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库https://element.eleme.cn/#/zh-CN/component/checkbox

indeterminate 状态

indeterminate 属性用以表示 checkbox 的不确定状态,一般用于实现全选的效果

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Vue 中,可以通过 v-model 指令绑定复选框的选中状态。实现全选反选单选功能可以通过以下方式: 1. 全选:绑定一个全选复选框,并将其选中状态绑定到一个 Boolean 类型的变量上,然后将所有子复选框的选中状态绑定到这个变量上。当全选复选框的选中状态改变时,通过 v-model 指令将变量的值同步到所有子复选框的选中状态,实现全选功能。 ```html <template> <div> <input type="checkbox" v-model="allSelected"> 全选 <div v-for="(item, index) in items" :key="index"> <input type="checkbox" :value="item" v-model="selectedItems"> {{ item }} </div> </div> </template> <script> export default { data() { return { items: ['A', 'B', 'C'], selectedItems: [], allSelected: false } }, watch: { allSelected(val) { this.selectedItems = val ? this.items : [] } } } </script> ``` 2. 反选:绑定一个反选的按钮,并在点击时通过计算属性将所有子复选框的选中状态取反。 ```html <template> <div> <button @click="toggleSelection">反选</button> <div v-for="(item, index) in items" :key="index"> <input type="checkbox" :value="item" v-model="selectedItems"> {{ item }} </div> </div> </template> <script> export default { data() { return { items: ['A', 'B', 'C'], selectedItems: [] } }, computed: { allSelected: { get() { return this.selectedItems.length === this.items.length }, set(val) { this.selectedItems = val ? this.items : [] } } }, methods: { toggleSelection() { this.selectedItems = this.items.filter(item => !this.selectedItems.includes(item)) } } } </script> ``` 3. 单选:绑定一个单选复选框,将其选中状态绑定到一个 String 类型的变量上,然后将所有子复选框的选中状态绑定到这个变量上。当子复选框的选中状态改变时,通过 v-model 指令将变量的值同步到单选复选框的选中状态,实现单选功能。 ```html <template> <div> <input type="checkbox" :value="null" v-model="selectedItem"> 无 <div v-for="(item, index) in items" :key="index"> <input type="checkbox" :value="item" v-model="selectedItem"> {{ item }} </div> </div> </template> <script> export default { data() { return { items: ['A', 'B', 'C'], selectedItem: null } }, computed: { allSelected: { get() { return this.selectedItems.length === this.items.length }, set(val) { this.selectedItems = val ? this.items : [] } } }, watch: { selectedItem(val) { this.selectedItems = val ? [val] : [] } } } </script> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南北极之间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值