【vue组件】使用element-ui 实现三级联动下拉选择

这篇具有很好参考价值的文章主要介绍了【vue组件】使用element-ui 实现三级联动下拉选择。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现的思路是第一个下拉选择在选择了选项后将该选项的信息传递到接口请求下一个选项的内容,依次类推
然后在清除了上一级选择的选项后要将其次级和子孙级的选项都清除(包括选择里的列表内容)
下面看具体代码:

<template>
  <div>
    <div>
      <el-form
        :size="'small'"
        :inline="true"
        :model="ruleForm"
        ref="ruleForm"
        label-width="120px"
        label-position="left"
        :rules="addRules"
      >
        <div class="scan_title">展示:</div>
		<!-- 自定义清除方法,注意change方法在clear前执行 -->
        <el-row>
          <el-form-item label="一级选项:" prop="firstId">
          	
            <el-select
              v-model="ruleForm.firstId"
              placeholder="请选择一级选项"
              @change="changeFirst"
              @clear="handleClearFirstId"
              style="width: 220px"
              clearable
            >
              <el-option
                v-for="item in allFirstList"
                :key="item.firstId"
                :label="item.firstNo"
                :value="item.firstId"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="次级选项:" prop="secondId">
            <el-select
              style="width: 220px"
              v-model="ruleForm.secondId"
              placeholder="请选择次级选项编号"
              @change="changeSecond"
              @clear="handleClearSecondId"
              clearable
            >
              <el-option
                v-for="item in allSecondList"
                :key="item.secondId"
                :label="item.secondNo"
                :value="item.secondId"
              >
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="三级选项:" prop="thirdId">
            <el-select
              style="width: 220px"
              v-model="ruleForm.thirdId"
              placeholder="请选择三级选项编号"
              @change="changeThird"
              value-key="thirdId"
              clearable
            >
              <el-option
                v-for="item in allThirdList"
                :key="item.thirdId"
                :label="item.thirdNo"
                :value="item.thirdId"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-row>
      </el-form>
    </div>
  </div>
</template>
<script>


export default {
  name: "LinkingSelect",
  props: {},
  data() {
    return {
      selectedLabelList: [],
      filSelectedLabels: [],
      refreshKey: 0,
      ruleForm: {},
      dynamicTags: [],
      tagVisible: false,
      allFirstList: [],
      allSecondList: [],
      allThirdList: [],
      addRules: {
        firstId: [
          {
            required: true,
            trigger: "change,blur",
            message: "请选择一级选项",
          },
        ],
        secondId: [
          {
            required: true,
            trigger: "change,blur",
            message: "请选择次级选项",
          },
        ],
        thirdId: [
          {
            required: true,
            trigger: "change,blur",
            message: "请选择三级选项",
          },
        ],
      },
    };
  },
  created() {
    this.handleGetAllFirst();
  },
  mounted() {
    
  },

  methods: {
    // 清除次级选择以及子孙选择的内容
    handleClearSecondId() {
      this.ruleForm.secondId = "";
      this.ruleForm.thirdId = "";
      this.allThirdList = [];
    },

    // 清除一级选择以及子孙选择的内容
    handleClearFirstId() {
      this.ruleForm.firstId = "";
      this.ruleForm.secondId = "";
      this.ruleForm.thirdId = "";
      this.allThirdList = [];
      this.allSecondList = [];
    },

    // 清除最后一级选择的内容并刷新
    changeThird() {
      this.$forceUpdate();
    },
    changeSecond(secondId) {
      this.ruleForm.thirdId = "";
      // 判断是否为空字符串
      if (secondId && secondId !== "") {
        // 请求接口
        // getThird({
        //   secondId: secondId,
        //   fileId: this.ruleForm.fileId,
        // }).then((res) => {
        //   this.allThirdList = res.data;
        // });

        // 模拟数据
        this.allThirdList = [
          {
            createBy: "admin",
            createTime: "2023-03-27 10:24:30",
            updateBy: "",
            updateTime: null,
            remark: null,
            thirdId: 3,
            thirdNo: "H0",
            leftCapacity: 1,
            totalCapacity: 5,
            secondNo: "X0",
            secondId: 11,
            firstNo: "G0",
            firstId: 11,
            manageBy: "admin",
            delFlag: "0",
            deptId: 100,
            deptName: "若依科技",
            beginTime: null,
            endTime: null,
            userId: null,
          },
        ];
      }
    },

    changeFirst(firstId) {
      this.ruleForm.secondId = "";
      this.ruleForm.thirdId = "";

      if (firstId !== "") {
        // 请求接口  
        // getSecond({
        //   firstId: firstId,
        //   fileId: this.ruleForm.fileId,
        // }).then((res) => {
        //   this.allSecondList = res.data;
        // });
        // 模拟数据
        this.allSecondList = [
          {
            createBy: "admin",
            createTime: "2023-03-27 10:24:10",
            updateBy: "",
            updateTime: null,
            remark: null,
            secondId: 11,
            secondNo: "X0",
            leftCapacity: 4,
            totalCapacity: 5,
            firstId: 11,
            firstNo: "G0",
            manageBy: "admin",
            delFlag: "0",
            deptId: 100,
            deptName: "若依科技",
            userId: null,
            thirdId: null,
          },
        ];
      }
    },
    handleGetAllFirst() {
      // getFirst({
      //   fileId: this.ruleForm.fileId,
      // }).then((res) => {
      //   this.allFirstList = res.data;
      // });

      this.allFirstList = [
        {
          createBy: "admin",
          createTime: "2023-03-27 10:23:57",
          updateBy: "",
          updateTime: null,
          remark: null,
          firstId: 11,
          firstNo: "G0",
          leftCapacity: 5,
          totalCapacity: 5,
          manageBy: "admin",
          delFlag: "0",
          deptId: 100,
          deptName: "若依科技",
          beginTime: null,
          endTime: null,
          userId: null,
          fileCate: null,
          secondId: null,
          thirdId: null,
        },
        {
          createBy: "aduser",
          createTime: "2023-03-27 10:15:12",
          updateBy: "",
          updateTime: null,
          remark: null,
          firstId: 6,
          firstNo: "G1",
          leftCapacity: 0,
          totalCapacity: 5,
          manageBy: "aduser",
          delFlag: "0",
          deptId: 201,
          deptName: "管理部",
          beginTime: null,
          endTime: null,
          userId: null,
          fileCate: null,
          secondId: null,
          thirdId: null,
        },
        {
          createBy: "aduser2",
          createTime: "2023-03-27 10:00:14",
          updateBy: "aduser2",
          updateTime: "2023-03-27 10:14:31",
          remark: null,
          firstId: 1,
          firstNo: "G11",
          leftCapacity: 0,
          totalCapacity: 5,
          manageBy: "aduser2",
          delFlag: "0",
          deptId: 207,
          deptName: "管理一部",
          beginTime: null,
          endTime: null,
          userId: null,
          fileCate: null,
          secondId: null,
          thirdId: null,
        },
      ];
    },
  },
};
</script>
<style scoped>

</style>

效果图:
【vue组件】使用element-ui 实现三级联动下拉选择文章来源地址https://www.toymoban.com/news/detail-507012.html

到了这里,关于【vue组件】使用element-ui 实现三级联动下拉选择的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue框架】Vue2中element-ui/mint-ui组件库——element-ui引入组件以及使用案例、mint-ui引入组件及使用案例

    element-ui 提供了大量的组件,如:布局组件、表单组件、JS组件等等。 Element-ui官网: https://element.eleme.cn/#/zh-CN 安装 Element-ui: npm i element-ui -S 1.1.1 引入组件 引入 Element 完整引入(在 main.js 中写入以下内容): 按需引入 借助 babel-plugin-component,我们可以只引入需要的组件,以达到

    2024年02月07日
    浏览(38)
  • vue实现省市区三级联动地址选择组件

    昨天收到一个新的需求,需要选择地址,因此就要做一个省市区三级联动的组件来使用,在网上找了一些资源,然后进行了尝试,没想到就这么成功了!要记录一下方便后续使用。 效果如下:  下面就记录一下代码叭! 后面因为需要动态绑定,以及处理回显问题,就需要进

    2024年02月12日
    浏览(62)
  • vue+element Cascader 级联选择器 > 实现省市区三级联动

    看完我们就开始啦 完美(实现后别忘记动动小手点个赞哦~) 请安装指定版本的element-china-area-data(5.0.2),否则可能会导致报错:CodeToText为undefined(我就遇到了(嘘),要注意哦~) ↩︎

    2024年02月16日
    浏览(39)
  • element-ui Vue 封装组件按钮工具栏,使用slot插槽

    封装常用按钮工具栏,方便其它页面调用 缺点:工具栏下面div会显示工具栏下面,下面需要使用margin-top:40px(小学生一个没整明白)希望大神能帮解决 运行效果          组件代码 tt-btnBar.vue 父窗口调用 testbtnbar.vue

    2024年02月02日
    浏览(30)
  • 使用element-ui导航,进入对应的三级页面菜单保持点击状态

    01.路由中使用了keepAlive属性,要用keepAlive:true,不能等于false,使用false页面会刷新 路由配置

    2024年02月10日
    浏览(29)
  • Vue使用element-ui/plus组件布局容器container失效解决方法

    这个错我遇到了好几次,每一次都花了很长时间解决,还是决定写个笔记记录一下。 在使用elementu官网的布局容器时,他是这样的。 我在确定elementui引入正确的情况下是这样写的。 注意,我在SideNav,Header,Main,Footer组件套了el-aside,el-header... 然后暴露出来在Home中引用。 当然错

    2024年02月11日
    浏览(36)
  • vue前端直接使用element-ui的upload组件上传到阿里云OSS存储

    因为公司的服务器比较拉吧,所以老大决定将数据文件等上传到阿里云服务器,通过ali-oss方式,这样的话读取文件也比较快  (能看到这说明什么安装element-ui都会了,我就不详细介绍了,直接跳过)  在执行下面操作之前,你要确定你的阿里云能看到上边这个页面   这里主

    2024年02月10日
    浏览(42)
  • 若依vue框架+element ui 组件路由跳转与菜单联动

    在后台管理系统中当点击某一按钮时,页面发生跳转(路由发生跳转,跳转到与按钮对应的页面),在跳转的同时在侧边栏中打开与之对应模块的菜单项 1.点击按钮跳转到/pay/PayIndex页面 2.在后台管理系统中侧边栏使用的是element ui 中的NavMenu导航菜单组件,在后台管理系统 src/l

    2024年02月14日
    浏览(37)
  • VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

        1、本组件支持列表的表头自定义配置,checkbox实现 2、本组件支持列表列排序,vuedraggable是拖拽插件,上图中字段管理里的拖拽效果 ,需要的话请自行npm install 3、本组件支持查询条件动态配置,穿梭框实现 https://download.csdn.net/download/askuld/88216937

    2024年01月16日
    浏览(46)
  • vue详细用法,ajax异步请求,案例分析 Element-ui组件使用,表单提交更新,下载,超详细

    标签及属性的使用 1.1 template 标签 1.2 form表单 1.2.1 ref属性 1.2.2 :model属性 1.2.3 :rules属性 1.2.4 label-width属性 1.2.5 el-row标签 1.2.5 el-col 标签 :span=\\\"12\\\"属性 1.2.5 el-form-item 标签 1.2.6 label 属性 1.2.7 prop属性 required 1.2.9 v-model属性 1.2.8 placeholder属性 效果图: 1.3 Select 选择器 当选项过多时,

    2023年04月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包