element-ui中多级联动的用法(select、cascater、tree)

64 篇文章 3 订阅
13 篇文章 0 订阅

一、三个以内,两个时(el-select)

<template>
=============同个两个@change实现父子孙的三级联动==================
  <el-form :inline="true">
    <el-form-item label="下拉1">
      <el-select
        v-model="selectData.com1"
        placeholder="请选择1"
        clearable
        @change="change1"
      >
        <el-option
          v-for="x in optionData.father"
          :key="x.value"
          :value="x.value"
          :label="x.name"
        ></el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="下拉2">
      <el-select
        v-model="selectData.com2"
        placeholder="请选择2"
        clearable
        @change="change2"
      >
        <el-option
          v-for="x in optionData.son[selectData.com1]"
          :key="x.value"
          :value="x.value"
          :label="x.name"
        ></el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="下拉3">
      <el-select v-model="selectData.com3" placeholder="请选择3" clearable>
        <el-option
          v-for="x in optionData.sun[selectData.com2]"
          :key="x.value"
          :value="x.value"
          :label="x.name"
        ></el-option>
      </el-select>
    </el-form-item>

==========这里是@change的回调测试===========
<el-form-item>
    <el-select @change="selectChanged" v-model="devType" size=small><el-option v-for="item in devTypes" :key="item" :label="item" :value="item"></el-option>    
    </el-select>
</el-form-item>



  </el-form>
</template>

<script>
  import tree from '@/data/regionData.json'
export default {
  data() {
    return {
        tree: tree,
        devType: '',
        devTypes: ['a', 'b', 'c'],
        selectData: {
        com1: '',
        com2: '',
        com3: ''
      },
      optionData: {
        father: [
          { value: 'A', name: '控件1A' },
          { value: 'B', name: '控件1B' },
          { value: 'C', name: '控件1C' }
        ],
        son: {
          A: [
            { value: 'A1', name: '控件2A1' },
            { value: 'A2', name: '控件2A2' },
            { value: 'A3', name: '控件2A3' }
          ],
          B: [
            { value: 'B1', name: '控件2B1' },
            { value: 'B2', name: '控件2B2' }
          ],
          C: [
            { value: 'C1', name: '控件2C1' },
            { value: 'C2', name: '控件2C2' }
          ]
        },
        sun: {
          A1: [
            { value: 'A11', name: '控件3A11' },
            { value: 'A12', name: '控件3A12' }
          ],
          A2: [
            { value: 'A21', name: '控件3A21' },
            { value: 'A22', name: '控件3A22' }
          ],
          A3: [
            { value: 'A31', name: '控件3A31' },
            { value: 'A32', name: '控件3A32' },
            { value: 'A33', name: '控件3A33' }
          ],
          B1: [
            { value: 'B11', name: '控件3B11' },
            { value: 'B12', name: '控件3B12' }
          ],
          B2: [{ value: 'B21', name: '控件3B21' }],
          C1: [{ value: 'C11', name: '控件3C11' }],
          C2: [
            { value: 'C21', name: '控件3C21' },
            { value: 'C22', name: '控件3C22' },
            { value: 'C23', name: '控件3C23' }
          ]
        }
      }
    };
  },
  methods: {
    change1: function (val) {
      if (val) {
          console.log(val)
          console.log(this.optionData.son[val][0].value)
        this.selectData.com2 = this.optionData.son[val][0].value; // 根据第一个控件所选项确定第二个控件下拉内容的对象数组,并使默认为第一个数组项
        this.change2(); // 控件2手动改变时会自动触发该方法,但是被动改变时不会触发,所以手动加上去
      } else {
        this.selectData.com2 = ''; // 若前一个控件清空则后一个控件所选内容也清空
        this.change2();
      }
    },
    change2: function () {
      const val = this.selectData.com2;
      if (val) {
        this.selectData.com3 = this.optionData.sun[val][0].value;
      } else {
        this.selectData.com3 = '';
      }
    },
    selectChanged(value) {
        console.log(value)
        console.log(this.tree[0])
    }
  }
};
</script>

<style>
</style>

四玺丸子炸鸡块====vue+elementui–el-select控件实现三级联动

cascater级联

具体js在上面

=======数据例子=======
[
  {
    "id": "zhinan",
    "parentId": null,
    "label": "指南",
    "value": "zhinan"
  },
  {
    "id": "shejiyuanze",
    "parentId": "zhinan",
    "label": "设计原则",
    "value": "shejiyuanze"
  },
==============这里是cascater级联的用法,重点在内部绑定数据显示的是label项=================
<el-form>
<el-form-item>
    <el-cascader
          :options="tree"
          :props="{ checkStrictly: true }"
          clearable></el-cascader>
</el-form-item>
</el-form>

三、很多级的时候,直接使用树形空间el-tree(选项可以选择,具体看属性定)

<template>
  <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
</template>

<script>
  export default {
    data() {
      return {
        data: [{
          label: '一级 1',
          children: [{
            label: '二级 1-1',
            children: [{
              label: '三级 1-1-1'
            }]
          }]
        }, {
          label: '一级 2',
          children: [{
            label: '二级 2-1',
            children: [{
              label: '三级 2-1-1'
            }]
          }, {
            label: '二级 2-2',
            children: [{
              label: '三级 2-2-1'
            }]
          }]
        }, {
          label: '一级 3',
          children: [{
            label: '二级 3-1',
            children: [{
              label: '三级 3-1-1'
            }]
          }, {
            label: '二级 3-2',
            children: [{
              label: '三级 3-2-1'
            }]
          }]
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      };
    },
    methods: {
      handleNodeClick(data) {
        console.log(data);
      }
    }
  };
</script>
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Element UI 的 Select 组件提供了一个 `change` 事件,可以用来处理下拉框的。下面是一个简单的二级示例: ```html <template> <div> <el-select v-model="selectedProvince" @change="handleProvinceChange"> <el-option v-for="province in provinces" :key="province.id" :label="province.name" :value="province.id"></el-option> </el-select> <el-select v-model="selectedCity"> <el-option v-for="city in cities" :key="city.id" :label="city.name" :value="city.id"></el-option> </el-select> </div> </template> <script> export default { data() { return { selectedProvince: '', selectedCity: '', provinces: [ { id: 1, name: '北京市' }, { id: 2, name: '上海市' }, { id: 3, name: '广东省' }, ], cities: [ { id: 1, name: '北京市', provinceId: 1 }, { id: 2, name: '上海市', provinceId: 2 }, { id: 3, name: '广州市', provinceId: 3 }, { id: 4, name: '深圳市', provinceId: 3 }, ], }; }, methods: { handleProvinceChange() { if (this.selectedProvince) { this.cities = this.cities.filter((city) => city.provinceId === this.selectedProvince); } else { this.cities = []; } this.selectedCity = ''; }, }, }; </script> ``` 代码有两个 Select 组件,一个用于选择省份,另一个用于选择城市。当省份选择发生变化时,通过 `handleProvinceChange` 方法来过滤出属于该省份的城市。需要注意的是,在过滤完城市之后,还要将 `selectedCity` 清空,以避免出现不一致的情况。 ### 回答2: element下拉框是指在使用element-uiselect组件时,通过设置不同级别的select组件的数据源,使得下级select组件的选项根据上级select的选态变化。 要实现select的二级,首先需要设置两个select组件,一个作为上级select,一个作为下级select。然后需要根据上级select的选项来获取对应的下级select的数据源,并态更新下级select的选项。 实现二级的具体步骤如下: 1. 设置上级select组件的数据源,例如一个数组,包含了上级选项的列表。 2. 监听上级select的选事件,在事件处理函数获取选项的值,并根据这个值获取对应的下级select的数据源。 3. 态更新下级select的数据源,通过赋值给data或者通过props属性传入下级select组件。 4. 添加逻辑,当上级select的选项发生改变时,下级select的选项要重置为空。 5. 设置下级select组件的数据源,接收上级select项对应的下级选项列表,并将其展示为下拉框选项。 通过以上步骤,就可以实现element下拉框的二级了。在选择上级select的选项时,下级select的选项会根据上级选项的选择态改变,实现了效果。 ### 回答3: element是一个基于Vue的UI组件库,它提供了丰富的UI组件,其包括了下拉框(select)组件。而下拉框的二级是指在选择第一级选项时,会根据选项的值来态更新第二级选项的内容。 实现element-ui select的二级的过程大致如下: 1. 在Vue组件引入element-uiselect组件并注册它。 2. 在数据定义两个数组,一个用于存储第一级选项的内容,另一个用于存储第二级选项的内容。 3. 使用两个select组件分别展示第一级选项和第二级选项,通过`v-model`绑定选的值。 4. 在第一级select的`change`事件,根据选的值更新第二级select的选项内容。 5. 在方法定义一个函数,根据第一级选的值筛选对应的第二级选项,并更新第二级选项的内容数组。 6. 在模板使用态的第二级选项数组展示第二级select的选项。 简单的示例代码如下: ``` <template> <div> <el-select v-model="firstLevel" @change="handleFirstLevelChange"> <el-option v-for="item in firstOptions" :key="item.value" :value="item.value" :label="item.label"></el-option> </el-select> <el-select v-model="secondLevel"> <el-option v-for="item in secondOptions" :key="item.value" :value="item.value" :label="item.label"></el-option> </el-select> </div> </template> <script> export default { data() { return { firstLevel: '', secondLevel: '', firstOptions: [ { value: '1', label: '选项1' }, { value: '2', label: '选项2' }, // ... ], secondOptions: [] }; }, methods: { handleFirstLevelChange() { // 根据选的第一级数值筛选对应的第二级选项 if (this.firstLevel === '1') { this.secondOptions = [ { value: '1-1', label: '选项1-1' }, { value: '1-2', label: '选项1-2' }, // ... ]; } else if (this.firstLevel === '2') { this.secondOptions = [ { value: '2-1', label: '选项2-1' }, { value: '2-2', label: '选项2-2' }, // ... ]; } else { this.secondOptions = []; } } } }; </script> ``` 通过以上代码,我们可以实现element-ui select的二级,当选择第一级选项时,第二级选项会态更新。根据具体的需求,你可以自定义数据以及逻辑,使二级更符合你的业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值