[email protected]扩展多个选择框级联

效果

老规矩,先不多说,上效果!

  1. 基本操作(根据 children 或 maxLevel 来确定显示的层级数量)

初始效果
在这里插入图片描述
选择后效果
在这里插入图片描述

  1. 动态加载 (通过 loadData 来加载下一层级的数据列表,分为change、focus 点击的模式进行加载时机)
    在这里插入图片描述

  2. 分页(对每个 select 列表进行分页或上滑加载数据)
    请添加图片描述

  3. 校验(多个选择框,校验需要注意新增属性来识别是有值或最后有值才校验)
    在这里插入图片描述

使用方式

安装

npm i --save design-vue-ui

引入

因为是基于ant-design-vue的,所以前置条件就是你安装了ant-design-vue v1版本,并且引入的组件样式必须在ant-design-vue的后面,原因应该是继承 ant-design-vue

import Vue from "vue";
import Antd from "ant-design-vue";
import DesignVueUI from "design-vue-ui";
import App from "./App";
import "ant-design-vue/dist/antd.less";
import "design-vue-ui/lib/design-vue-ui.less";
Vue.config.productionTip = false;
Vue.use(DesignVueUI);

/* eslint-disable no-new */
new Vue({
   
   
  el: "#app",
  components: {
   
    App },
  template: "<App/>",
});

开整

region.json

结构如果不是下面这种树结构,可设置 fieldNames属性, 自定义节点 label、value 、children([disabled, key, title])的字段 。
默认是 { label: 'label', value: 'value', children: 'children' }

或者选择 loadData属性方式进行动态加载级联

[
    {
   
   
        "id": "320000",
        "value": "320000",
        "label": "江苏省",
        "level": 1,
        "children": [
            {
   
   
                "pid": "320000",
                "id": "320100",
                "value": "320100",
                "label": "南京市",
                "level": 2,
                "children": [
                    {
   
   
                        "pid": "320100",
                        "id": "320102",
                        "value": "320102",
                        "label": "玄武区",
                        "level": 3,
                        "children": []
                    },
                    ...
                ]
            },
            ...
        ]
    },
    ...
]

baseMixin(例子)

import region from "../../../http/json/region.json";
export default {
   
   
  data() {
   
   
    return {
   
   
      options: [],
    };
  },
  created() {
   
   
    this.options = this.deepClone(region);
  },
  methods: {
   
   
    delay(ms) {
   
   
      return new Promise((resolve) => setTimeout(resolve, ms));
    },
    deepClone(obj) {
   
   
      if (obj === null || typeof obj !== "object") {
   
   
        return obj;
      }

      if (Array.isArray(obj)) {
   
   
        return obj.map((v) => this.deepClone(v));
      }

      const clonedObj = {
   
   };
      for (const key of Object.keys(obj)) {
   
   
        clonedObj[key] = this.deepClone(obj[key]);
      }

      return clonedObj;
    },
  },
};

基本操作

<template>
  <div class="demo-main"><
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值