【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单

简介: 【sgLazyCascader】自定义组件:基于el-cascader的懒加载级联菜单,支持异步加载子级菜单


sgLazyCascader源码

<template>
  <el-cascader
    :class="$options.name"
    style="width: 100%"
    :props="props"
    v-model="model"
    :placeholder="placeholder || '请选择'"
    :options="options"
    :clearable="clearable === '' || clearable"
  ></el-cascader>
</template>
<script>
export default {
  name: "sgLazyCascader",
  data() {
    return {
      model: null,
      mainKey: "id", //默认主键
      defaultRootId: "root", //默认根节点ID就是root
      form: {},
      props: {
        lazy: true,
        expandTrigger: "hover",
        multiple: false,
        checkStrictly: this.checkStrictly === "" || this.checkStrictly, //是否支持选中非叶子节点(是否严格的遵守父子节点不互相关联  )
        lazyLoad: (node, resolve) => {
          this.loadNodeData(
            node.level === 0 ? { [this.mainKey]: this.defaultRootId } : node.data,
            (d) => resolve(d)
          );
        },
      },
    };
  },
  props: [
    "value",
    "options", //回显的时候使用
    "data",
    "placeholder",
    "clearable",
    "checkStrictly",
  ],
  watch: {
    value: {
      handler(d) {
        this.model = d;
      },
      deep: true,
      immediate: true,
    },
    model(d) {
      this.$emit("input", d);
    },
    data: {
      handler(d) {
        d.nodeKey && (this.mainKey = d.nodeKey); //主键
        d.rootId && (this.defaultRootId = d.rootId); //根节点ID
        d.value && (this.props.value = d.value); //指定选项的值为选项对象的某个属性值
        d.label && (this.props.label = d.label); //指定选项标签为选项对象的某个属性值
        d.children && (this.props.children = d.children); //指定选项的子选项为选项对象的某个属性值
        d.expandTrigger && (this.props.expandTrigger = d.expandTrigger); //次级菜单的展开方式click / hover
        d.hasOwnProperty("multiple") && (this.props.multiple = d.multiple); //是否多选
        d.hasOwnProperty("lazy") && (this.props.lazy = d.lazy); //是否动态加载子节点,需与 lazyLoad 方法结合使用
      },
      deep: true,
      immediate: true,
    },
  },
  methods: {
    // 加载节点数据(通过接口向后台获取数据)
    loadNodeData(data, cb) {
      let resolve = (d) => {
        cb && cb(d);
      };
      this.$emit(`loadNode`, { data, resolve });
    },
  },
};
</script>

用例

<template>
  <div :class="$options.name">
    <sgLazyCascader
      v-model="value"
      :data="{
        nodeKey: `ID`, //主键
        value: `ID`,
        label: 'MC',
      }"
      :options="options"
      placeholder="请选择"
      @loadNode="loadNode"
    />
  </div>
</template>
<script>
import sgLazyCascader from "@/vue/components/admin/sgLazyCascader";
export default {
  components: {
    sgLazyCascader,
  },
  data() {
    return {
      value: [],
      options: [],
    };
  },
  methods: {
    // 加载节点数据
    loadNode({ data, resolve }) {
      this.$d.column_queryByPid({
        data: { PID: data.ID },
        doing: { s: (d) => resolve(d) },
      });
    },
  },
};
</script>


相关文章
|
JavaScript 数据格式
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
2340 0
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
|
自然语言处理 算法
向量检索服务的优缺点
使用向量检索服务的好处是它可以将文本信息转化为向量表示,并进行相似度计算。这使得能够高效地搜索与查询进行语义匹配的文本
1461 3
element el-cascader动态编辑赋值后,不回显的解决方法(整理)
element el-cascader动态编辑赋值后,不回显的解决方法(整理)
|
UED
element el-cascader动态加载数据 (多级联动,落地方案)
最近需要用到element ui的这个插件做地区的四级联动,但是碰了一些问题: 官网的说明太泛泛然,不易看懂 网上的教程乱七八糟,代码一堆一堆的 看这篇就对了!!!
2720 0
element el-cascader动态加载数据 (多级联动,落地方案)
|
存储 缓存 Go
Go语言开发者必读:内存缓存技巧
Go语言开发者必读:内存缓存技巧
402 0
|
算法 数据可视化 机器人
ubuntu16.04下ROS操作系统学习笔记(九)Moveit(上)
ubuntu16.04下ROS操作系统学习笔记(九)Moveit(上)
1108 0
|
NoSQL Redis Windows
windows版redis报错:本地计算机上的Redis服务启动后停止
1问题 2 原因 3解决 3.1 如果需要临时启动Redis 3.2 如果需要将Redis注册为服务 4其他说明 1、问题 使用命令redis-server.exe  --service-install redis.windows.conf命令将redis注册为服务,启动服务时报错: 本地计算机上的Redis服务启动后停止。
2669 0
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
2031 0
Vue3日期选择器(DatePicker)
该组件基于 **@vuepic/vue-datepicker@9.0.1** 进行二次封装,简化了日常使用。除范围和年选择器外,其他日期选择均返回格式化的字符串。提供了多种自定义设置,如日期选择器宽度、模式、格式等,并支持时间选择和“今天”按钮展示。详细配置及更多功能请参考[官方文档](https://vue3datepicker.com/installation/)。组件已集成所有原生属性,并支持主题颜色自定义。 示例代码展示了如何创建和使用日期选择器组件,包括基本使用、禁用日期、日期时间选择器、范围选择器等多种场景。更多功能和样式可通过官方文档了解。
3603 2
Vue3日期选择器(DatePicker)
|
人工智能 自然语言处理 测试技术
通义灵码多维度体验分享
一文带你多维度了解通义灵码
1187 4

热门文章

最新文章

下一篇
开通oss服务