vue+element 多选级联选择器自定义props

news2024/11/26 2:38:37

前言

我这里分享的是Cascader 级联选择器中的多选、以及如何自定义props的使用详解

1.使用Cascader 级联选择器

效果
在这里插入图片描述

代码

<div class="block">
  <span class="demonstration">默认显示所有Tag</span>
  <el-cascader
    :options="options"
    :props="props"
    clearable></el-cascader>
</div>
<div class="block">
  <span class="demonstration">折叠展示Tag</span>
  <el-cascader
    :options="options"
    :props="props"
    collapse-tags
    clearable></el-cascader>
</div>

<script>
  export default {
    data() {
      return {
        props: { multiple: true },
        options: [{
          value: 1,
          label: '东南',
          children: [{
            value: 2,
            label: '上海',
            children: [
              { value: 3, label: '普陀' },
              { value: 4, label: '黄埔' },
              { value: 5, label: '徐汇' }
            ]
          }, {
            value: 7,
            label: '江苏',
            children: [
              { value: 8, label: '南京' },
              { value: 9, label: '苏州' },
              { value: 10, label: '无锡' }
            ]
          }, {
            value: 12,
            label: '浙江',
            children: [
              { value: 13, label: '杭州' },
              { value: 14, label: '宁波' },
              { value: 15, label: '嘉兴' }
            ]
          }]
        }, {
          value: 17,
          label: '西北',
          children: [{
            value: 18,
            label: '陕西',
            children: [
              { value: 19, label: '西安' },
              { value: 20, label: '延安' }
            ]
          }, {
            value: 21,
            label: '新疆维吾尔族自治区',
            children: [
              { value: 22, label: '乌鲁木齐' },
              { value: 23, label: '克拉玛依' }
            ]
          }]
        }]
      };
    }
  };
</script>

这里在优化一下,将option放置外部引入,如果是通过后端传入的数据这里也可以直接赋值给option
创建一个regin.js

const arr = [{
  value: 1,
  label: '东南',
  children: [{
    value: 2,
    label: '上海',
    children: [
      { value: 3, label: '普陀' },
      { value: 4, label: '黄埔' },
      { value: 5, label: '徐汇' }
    ]
  }, {
    value: 7,
    label: '江苏',
    children: [
      { value: 8, label: '南京' },
      { value: 9, label: '苏州' },
      { value: 10, label: '无锡' }
    ]
  }, {
    value: 12,
    label: '浙江',
    children: [
      { value: 13, label: '杭州' },
      { value: 14, label: '宁波' },
      { value: 15, label: '嘉兴' }
    ]
  }]
}, {
  value: 17,
  label: '西北',
  children: [{
    value: 18,
    label: '陕西',
    children: [
      { value: 19, label: '西安' },
      { value: 20, label: '延安' }
    ]
  }, {
    value: 21,
    label: '新疆维吾尔族自治区',
    children: [
      { value: 22, label: '乌鲁木齐' },
      { value: 23, label: '克拉玛依' }
    ]
  }]
}]
export default arr

页面中使用
将rogin.js引入,然后在生命周期函数中赋值给options、这里如果数据是要通过后端传输的话就在生命周期函数中去调用接口的方法、然后在将后端传入的值赋给options。

<template>
  <div class="OrderDispose">
    <div class="block">
      <span class="demonstration">折叠展示Tag</span>
      <el-cascader
        :options="options"
        :props="props"
        collapse-tags
        clearable></el-cascader>
    </div>
  </div>
</template>

<script>
import rogin from '@/assets/region'
export default {
  data() {
    return {
      props: { multiple: true },
      options: []
    };
  },
  mounted(){
    this.options = rogin
  }
}
</script>

<style>
.demonstration{
  margin-right: 10px;
}
</style>

到这里就完成了级联选择器的初步使用

2.自定义props

先说一下我遇到时的业务场景:
我需要渲染一个列表,但是这个列表里面的字段并不是value作为值、label为标签、子集也不是叫children
例如:

[{
  regionValue: 1,
  regionLabel: '东南',
  child: [{
    regionValue: 2,
    regionLabel: '上海',
    child: [
      { regionValue: 3, regionLabel: '普陀' },
      { regionValue: 4, regionLabel: '黄埔' },
      { regionValue: 5, regionLabel: '徐汇' }
    ]
  }, {
    regionValue: 7,
    regionLabel: '江苏',
    child: [
      { regionValue: 8, regionLabel: '南京' },
      { regionValue: 9, regionLabel: '苏州' },
      { regionValue: 10, regionLabel: '无锡' }
    ]
  }, {
    regionValue: 12,
    regionLabel: '浙江',
    child: [
      { regionValue: 13, regionLabel: '杭州' },
      { regionValue: 14, regionLabel: '宁波' },
      { regionValue: 15, regionLabel: '嘉兴' }
    ]
  }]
}, {
  regionValue: 17,
  regionLabel: '西北',
  child: [{
    regionValue: 18,
    regionLabel: '陕西',
    child: [
      { regionValue: 19, regionLabel: '西安' },
      { regionValue: 20, regionLabel: '延安' }
    ]
  }, {
    regionValue: 21,
    regionLabel: '新疆维吾尔族自治区',
    child: [
      { regionValue: 22, regionLabel: '乌鲁木齐' },
      { regionValue: 23, regionLabel: '克拉玛依' }
    ]
  }]
}]

例如这种不是组件本身默认值的字段
在这里插入图片描述
这个时候就需要使用自定义props
先看官方文档的说明
在这里插入图片描述
这里我们就是要用到value、label、children
先在组件中定义:props="props"

      <el-cascader
        :options="options"
        :props="props"
        collapse-tags
        clearable></el-cascader>

然后修改data里面

data() {
    return {
      props: { multiple: true,label:'regionLabel',value:'regionValue',children:'child' },
      options: []
    };
  },

然后在查看效果
在这里插入图片描述
成功!
那么问题又来了,目前是必须要所有字段统一,简单来说就是无论在哪一级菜单值必须要叫regionValue,或者label必须为标签,那如果数据长成这样呢
各级菜单的标签与值的字段都不一样
例如:

const arr = [{
  Value: 1,
  Label: '东南',
  child: [{
    regionValue: 2,
    regionLabel: '上海',
    child: [
      { regionValue: 3, regionLabel: '普陀' },
      { regionValue: 4, regionLabel: '黄埔' },
      { regionValue: 5, regionLabel: '徐汇' }
    ]
  }, {
    regionValue: 7,
    regionLabel: '江苏',
    child: [
      { regionValue: 8, regionLabel: '南京' },
      { regionValue: 9, regionLabel: '苏州' },
      { regionValue: 10, regionLabel: '无锡' }
    ]
  }, {
    regionValue: 12,
    regionLabel: '浙江',
    child: [
      { regionValue: 13, regionLabel: '杭州' },
      { regionValue: 14, regionLabel: '宁波' },
      { regionValue: 15, regionLabel: '嘉兴' }
    ]
  }]
}, {
  Value: 17,
  Label: '西北',
  child: [{
    regionValue: 18,
    regionLabel: '陕西',
    child: [
      { regionValue: 19, regionLabel: '西安' },
      { regionValue: 20, regionLabel: '延安' }
    ]
  }, {
    regionValue: 21,
    regionLabel: '新疆维吾尔族自治区',
    child: [
      { regionValue: 22, regionLabel: '乌鲁木齐' },
      { regionValue: 23, regionLabel: '克拉玛依' }
    ]
  }]
}]

一级菜单与二级菜单的值分别显示为ValueregionValue,标签为LabelregionLabel,这种字段不一的情况会导致其中一个显示有问题。
在这里插入图片描述
如果以一级菜单的字段做匹配的话,那么二级菜单就会不显示,这个时候就需要对数据进行二次处理,目的是把所有级的字段统一比如说值就是显示为value,标签就是为label
定义一个方法为disposeData,并且在生命周期函数中挂载,我用的方法是将一级菜单为匹配字段,将二级的字段全部替换为一级菜单

    disposeData(){
      let children = []
      this.options.forEach((item,index) => {
        item.child.forEach((Item,Index) => {
          children[Index] = {"Value" : Item.regionValue,"Label" : Item.regionLabel}
        })
        this.options[index] = {"Value":item.Value,"Label":item.Label,"child":children}
      })
    }

再看看效果
在这里插入图片描述
成功!

完整代码

<template>
  <div class="OrderDispose">
    <div class="block">
      <span class="demonstration">折叠展示Tag</span>
      <el-cascader
        :options="options"
        :props="props"
        collapse-tags
        clearable></el-cascader>
    </div>
  </div>
</template>

<script>
import rogin from '@/assets/region'
export default {
  data() {
    return {
      props: { multiple: true,label:'Label',value:'Value',children:'child' },
      options: []
    }
  },
  methods:{
    disposeData(){
      let children = []
      this.options.forEach((item,index) => {
        item.child.forEach((Item,Index) => {
          children[Index] = {"Value" : Item.regionValue,"Label" : Item.regionLabel}
        })
        this.options[index] = {"Value":item.Value,"Label":item.Label,"child":children}
      })
    }
  },
  mounted(){
    this.options = rogin
    this.disposeData()
  }
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue电商项目--vuex模块开发

vuex状态管理库 vuex是什么&#xff1f; vuex是官方提供的一个插件&#xff0c;状态管理库&#xff0c;集中式管理项目中组件共有的数据。 切记&#xff0c;并不是全部的项目都需要Vuex,如果项目很小&#xff0c;完全不需要vuex,如果项目很大&#xff0c;组件很多&#xff0…

一道Python初学者常犯错误解析

1. 引言 在Python学习中&#xff0c;经常会遇到各种各样的代码错误&#xff0c;尤其对于初学者而言&#xff0c;明明觉得逻辑上是对的&#xff0c;但是代码运行起来&#xff0c;往往不是自己想要的结果。 本文就最近在某平台看到的一个常见错误进行展开&#xff0c;帮助大家更…

06 虚拟化Open vSwitch环境部署

文章目录 06 虚拟化Open vSwitch环境部署6.1 安装Open vSwitch网桥6.1.1 安装Open vSwitch组件6.1.1.1 安装Open vSwitch组件6.1.1.2 启动Open vSwitch服务6.1.1.3 设置Open vSwitch服务随系统自动启动 6.1.2 确认安装是否成功6.1.2.1确认 Open vSwitch组件是否安装成功6.1.2.2…

kill 信号

kill -0 PidNum 参数是0&#xff0c;不会发送任何的信号&#xff0c;不会关闭程序&#xff0c;但会执行错误检查&#xff0c;对程序运行状态进行监控。可以用他来检测某个进程ID或进程组ID是否存在。从理解上看&#xff0c;作用相当于ps -p 。 进程已停止、不存在或其他异…

前端小白是如何利用chatgt用一周时间从做一款微信小程序的

前端小白是如何利用chatgt用一周时间从0做一款微信小程序的 随着chatgpt的大火&#xff0c;真的是在工作上给各行各业的人带来了极大的便利&#xff0c;本人是一个java程序员&#xff0c;其实我自己是一直想开发一款属于自己的小程序的&#xff0c;但是迫于对前端知识的贫瘠&a…

【五一创作】VimPlug插件配置

目录 Install Question Q1&#xff1a;字体乱码 Q2&#xff1a;插件配置 Q3&#xff1a;安装扩展插件 Q4&#xff1a;查看安装插件状态 Q5&#xff1a;查看默认插件 Q6&#xff1a;卸载插件 Q7&#xff1a;增加用户配置 Install Github地址&#xff1a;GitHub - chxu…

内网渗透之横向移动NTMLRelay(中继)攻击-InveighNTLM-Relay重放

横向移动 NTLM中继攻击 Relay重放(smb) 适用于无法获取hash或密码时使用 NTML Relay重放包括smb to relay ldap ews webserver: 执行下面的命令时会默认以当前用户名和密码去登录目标计算机 dir \\ 192.168.3.32\c$webserver切换到本地的administrator时 dir \\ 192.168.3.3…

权限提升:令牌窃取 || 进程注入.

权限提升&#xff1a;令牌窃取 || 进程注入. 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因…

管理系统的实现_03

文章目录 登录界面的开发安装axios用于前后端交互第一步、在项目目录下执行命令第二步、在main.js文件夹添加如下代码第三步、使用this.axios 即可访问到 Login.vue 完整代码如下搭建第一个springboot项目第一步、修改配置文件(application.properties)第二步、创建包目录 用sp…

希尔排序(C++)

希尔排序 是插入排序的一种&#xff0c;也是缩小增量排序。希尔排序是记录按下标的一定增量分组&#xff0c;对每组使用直接插入排序算法排序&#xff1b;随着增量逐渐减少&#xff0c;每组包含的关键词越来越多&#xff0c;当增量减至1时&#xff0c;整个文件恰被分成一组&am…

常用的极限

常用的极限 方法1 利用基本极限求极限 1.常用的基本极限 一个函数极限是非零常数&#xff0c;分母极限为零&#xff0c;分子极限必为零 幂指函数转为指数函数的形式,再等价代换 方法二 分子分母凑成可以使用等价无穷小代换的形式 arcsinx 和 sin x 作为分子是相减的. 1 先使用…

数据结构之带头循环双向链表

目录 1.何为双链表&#xff1f; 2.带头循环双向链表 1.函数接口与结构体 2.初始化链表 3.销毁链表 4.打印链表 5.创建节点 6.尾插 7.尾删 8.头插 9.头删 10 查找节点 11.在pos前插入x 12.删除pos位置的值 在学习了单链表之后&#xff0c;我们发现单链表弥补了了顺…

Spring 管理 Bean-IOC--基于注解配置 bean

目录 Spring 管理 Bean-IOC--基于注解配置 bean ● 基本介绍 ● 组件注解的形式有 代码演示--了解注解 UserDao UserService UserAction MyComponent 配置 beans.xml 注意 测试 注意事项和细节说明 自动装配 基本说明 应用实例需求 UserService UserAction 配置…

MLC LLM:将大模型运行在手机端的部署工具

前言 MLC LLM 是一个通用的解决方案 它允许任何语言模型在不同的硬件后端和本地应用程序集上进行本地部署 并为每个人提供一个高效的框架&#xff0c;以进一步优化模型的性能&#xff0c;满足他们自己的用例 其使命是让每个人都能在自己的设备&#xff08;如手机端&#xf…

WordPress 不使用ftp更新

文章目录 摘要修改 wp-config.php文件处理 413 Request Entity Too Large修改nginx配置&#xff1a;client_max_body_size重启nginx 处理uploaded file exceeds the upload max filesize找到php.ini修改 upload_max_filesize重启php 摘要 每次 WordPress 有插件或主题更新都要…

计算机组成原理第五章(2)---中断

5.1概述 产生和应用 在IO设备和主机交换数据时&#xff0c;由于设备本身的机电特性的影响&#xff0c;其工作速度比较低&#xff0c;与CPU无法匹配&#xff0c;如果采用程序查询的方式需要CPU进行等待&#xff0c;但是如果在等待的过程中CPU可以执行其他的程序&#xff0c;可…

04_Uboot操作命令与其他命令

目录 BOOT 操作命令 bootz命令 bootm 命令 reset 命令 go 命令 run 命令 mtest 命令 BOOT 操作命令 uboot的本质工作是引导Linux,所以uboot肯定有相关的boot(引导)命令来启动Linux。常用的跟boot有关的命令有:bootz、bootm和boot。 bootz命令 要启动Linux,需要先将Lin…

《LearnUE——基础指南:上篇—1》——GamePlay架构之Actor和Component

目录 Component大法好&#xff0c;谁用谁知道&#xff01;&#xff01; 1.1.1 创世&#xff08;UObject&#xff09; 1.1.2 造物&#xff08;Actor&#xff09; 1.1.3 赋能&#xff08;Component&#xff09; Component大法好&#xff0c;谁用谁知道&#xff01;&#xff0…

合肥职业技术学院分类考试招生职业技能考试 -- 计算机专业

考试大纲模块一 专业能力测试主要内容模块二 技术技能测试主要内容分值分布 分模块讲解模块一 专业能力测试计算机的发展、类型及其应用领域计算机技术的发展计算机应用领域 计算机中数据的表示、存储和处理计算机软、硬件系统的组成及主要技术指标计算机软、硬件系统的组成硬件…

YOLOv5-7.0训练中文标签的数据集

链接&#xff1a;https://pan.baidu.com/s/1KSROxTwyYnNoNxI5Tk13Dg 提取码&#xff1a;8888 以显示楷体为例&#xff08;上面的百度网盘里面有黑体、宋体、楷体ttf文件&#xff09; (1)将metric.py中&#xff1a; 将 sn.set(font_scale1.0 if nc < 50 else 0.8) # for …