【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进行懒加载的怎么实现数据回显?
2489 0
vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?
|
UED
element el-cascader动态加载数据 (多级联动,落地方案)
最近需要用到element ui的这个插件做地区的四级联动,但是碰了一些问题: 官网的说明太泛泛然,不易看懂 网上的教程乱七八糟,代码一堆一堆的 看这篇就对了!!!
2836 0
element el-cascader动态加载数据 (多级联动,落地方案)
|
算法 数据可视化 机器人
ubuntu16.04下ROS操作系统学习笔记(九)Moveit(上)
ubuntu16.04下ROS操作系统学习笔记(九)Moveit(上)
1227 0
|
JSON 前端开发 JavaScript
【前端】使用jQuery封装一套UI组件 - 级联选择器组件
本篇文章来讲解下级联选择器组件 级联选择器,在实际项目中也是比较常用的组件,比如:省市区三级关联,上下级联动等 最后面会附上全部代码
|
前端开发
CSS文字溢出显示省略号,且出现title或者tooltip
CSS文字溢出显示省略号,且出现title或者tooltip
12529 0
CSS文字溢出显示省略号,且出现title或者tooltip
|
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服务启动后停止。
2783 0
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
【el-cascader-plus亲测有限】el-cascader级联选择器懒加载+多选功能回显失败解决方案
2197 0
|
存储 安全 算法
陪玩系统功能 陪玩平台 陪玩系统用户体验 陪玩系统安全性 陪玩系统开发
陪玩系统旨在为用户寻找合适的陪玩者,提供注册登录、资料展示、搜索匹配、预约支付、实时沟通及评价反馈等功能。平台拥有丰富的陪玩资源,便捷的预约流程,安全的支付环境和良好的用户体验。系统通过优化算法、提升沟通效率、丰富服务内容和建立社区互动来提升用户体验。安全性方面,系统采用数据加密、防火墙、支付安全和实名认证等措施。开发过程包括需求分析、系统设计、前后端开发、测试优化和上线推广。
1321 2
|
JavaScript
Vue2级联选择(Cascader)
这是一个基于 Vue 3 的级联选择组件,支持多种自定义属性,如数据源、选中项、文本字段等。提供了丰富的配置项,如层级间隙、宽度、高度、禁用状态和占位符等,便于灵活使用。组件通过监听选择变化并触发回调事件,实现了动态更新与交互。
1094 1
Vue2级联选择(Cascader)
|
人工智能 自然语言处理 测试技术
通义灵码多维度体验分享
一文带你多维度了解通义灵码
1468 4

热门文章

最新文章