vue3种table表格选项个数的控制方法


Posted in Vue.js onApril 14, 2022

问题描述

提示:这里描述具体问题:我们再用table表格的时候多多少少都会有限制个数的时候,在正常的表格上只有单选或或者多选的样式,没有在多选里面添加最多选几个选项的属性。

例如:我在table表格中只想选择两项。

vue3种table表格选项个数的控制方法

原因分析:

提示:这里填写问题的分析:当前quasar框架不支持个数选择,只能自己来实现。

解决方案:

提示:这里填写该问题的具体解决方案:在选择框中有一个属性是selected-rows-label,这个数属性是当有选择框被点中的时候就会触发。利用这个属性来控制个数。原理是,在table中绑定一个数据,当勾选了一个选项时就会把选择的数据添加到这个数据中,进而会触发selected-rows-label属性,这个属性绑定一个函数,在函数中实现数据属性的长度。当数据长度大于2的时候就设置为2。这样就实现控制选项个数。

例如:下面就是我做的实验。在table可选这数据的时候限制只需选择两项。

下面是页面代码:

<div id="q-app" style="min-height: 100vh;">
  <div class="q-pa-md">
    <q-table
      title="Treats"
      :rows="rows"
      :columns="columns"
      row-key="name"
      :selected-rows-label="getSelectedString"
      selection="multiple"
      v-model:selected="selected"
    ></q-table>

    <div class="q-mt-md">
      Selected: {{ JSON.stringify(selected) }}
    </div>
  </div>
</div>

下面js代码:

const { ref } = Vue

const columns = [
  {
    name: 'desc',
    required: true,
    label: 'Dessert (100g serving)',
    align: 'left',
    field: row => row.name,
    format: val => `${val}`,
    sortable: true
  },
  { name: 'calories', align: 'center', label: 'Calories', field: 'calories', sortable: true },
  { name: 'fat', label: 'Fat (g)', field: 'fat', sortable: true },
  { name: 'carbs', label: 'Carbs (g)', field: 'carbs' },
  { name: 'protein', label: 'Protein (g)', field: 'protein' },
  { name: 'sodium', label: 'Sodium (mg)', field: 'sodium' },
  { name: 'calcium', label: 'Calcium (%)', field: 'calcium', sortable: true, sort: (a, b) => parseInt(a, 10) - parseInt(b, 10) },
  { name: 'iron', label: 'Iron (%)', field: 'iron', sortable: true, sort: (a, b) => parseInt(a, 10) - parseInt(b, 10) }
]

const rows = [
  {
    name: 'Frozen Yogurt',
    calories: 159,
    fat: 6.0,
    carbs: 24,
    protein: 4.0,
    sodium: 87,
    calcium: '14%',
    iron: '1%'
  },
  {
    name: 'Ice cream sandwich',
    calories: 237,
    fat: 9.0,
    carbs: 37,
    protein: 4.3,
    sodium: 129,
    calcium: '8%',
    iron: '1%'
  },
  {
    name: 'Eclair',
    calories: 262,
    fat: 16.0,
    carbs: 23,
    protein: 6.0,
    sodium: 337,
    calcium: '6%',
    iron: '7%'
  },
  {
    name: 'Cupcake',
    calories: 305,
    fat: 3.7,
    carbs: 67,
    protein: 4.3,
    sodium: 413,
    calcium: '3%',
    iron: '8%'
  },
  {
    name: 'Gingerbread',
    calories: 356,
    fat: 16.0,
    carbs: 49,
    protein: 3.9,
    sodium: 327,
    calcium: '7%',
    iron: '16%'
  },
  {
    name: 'Jelly bean',
    calories: 375,
    fat: 0.0,
    carbs: 94,
    protein: 0.0,
    sodium: 50,
    calcium: '0%',
    iron: '0%'
  },
  {
    name: 'Lollipop',
    calories: 392,
    fat: 0.2,
    carbs: 98,
    protein: 0,
    sodium: 38,
    calcium: '0%',
    iron: '2%'
  },
  {
    name: 'Honeycomb',
    calories: 408,
    fat: 3.2,
    carbs: 87,
    protein: 6.5,
    sodium: 562,
    calcium: '0%',
    iron: '45%'
  },
  {
    name: 'Donut',
    calories: 452,
    fat: 25.0,
    carbs: 51,
    protein: 4.9,
    sodium: 326,
    calcium: '2%',
    iron: '22%'
  },
  {
    name: 'KitKat',
    calories: 518,
    fat: 26.0,
    carbs: 65,
    protein: 7,
    sodium: 54,
    calcium: '12%',
    iron: '6%'
  }
]

const app = Vue.createApp({
  setup () {
    const selected = ref([])

    return {
      selected,
      columns,
      rows,

      getSelectedString () {
        if(selected.value.length > 2){
          **selected.value.length = 2**
          return 0
        } else {
          return selected.value.length === 0 ? '' : `${selected.value.length} record${selected.value.length > 1 ? 's' : ''} selected of ${rows.length}`
        }
        
      }
    }
  }
})

app.use(Quasar, { config: {} })
app.mount('#q-app')
Vue.js 相关文章推荐
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
vue实现简易的双向数据绑定
Dec 29 Vue.js
vuex的使用步骤
Jan 06 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
vue使用element-ui按需引入
May 20 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 #Vue.js
解决vue-router的beforeRouteUpdate不能触发
Apr 14 #Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 #Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 #Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 #Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 #Vue.js
vue elementUI表格控制对应列
Apr 13 #Vue.js
You might like
Yii框架弹出框功能示例
2017/01/07 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
简单学习vue指令directive
2016/11/03 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
vue生命周期的探索
2019/04/03 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
Python实现随机选择元素功能
2017/09/14 Python
python try except 捕获所有异常的实例
2018/10/18 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
董事长岗位职责
2013/11/30 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL