vue用el-select和el-tree实现树状结构单击选中

业务需求是选择框展示后端传来的树状结构数据,可下拉,选中节点显示在输入框下拉菜单消失

一、代码

1.template部分

<template>
  <div>
    <el-select
      // ref属性注册,用于在vue中操作dom元素
      ref="selectTree"
      v-model="form.Id"
      filterable
      placeholder="请选择...">
      <el-option
        :key="form.Id"
        :value="form.Id"
        :label="form.label"
        style="height: auto"
        hidden/>
      <el-tree
        ref="tree"
        :data="data"
        :props="defaultProps"
        :node-key="defaultProps.value"
        default-expand-all
        @node-click="handleClickNode"
        />
    </el-select>
  </div>
</template>

注意:el-option需要设置一个hidden隐藏的下拉选项,若不设置则tree组件无法使用,因为选择器是el-select和el-option组成的下拉选项,tree自带下拉选择,所以需要隐藏el-option的下拉选项。

2、data部分

data: [{
          Id: 1,
          label: '一级 1',
          children: [{
            Id: 11,
            label: '二级 1-1',
            children: [{
              Id: 111,
              label: '三级 1-1-1'
            }]
          }]
        }, {
          Id: 2,
          label: '一级 2',
          children: [{
            Id: 21,
            label: '二级 2-1',
            children: [{
              Id: 211,
              label: '三级 2-1-1'
            }]
          }, {
            Id: 22,
            label: '二级 2-2',
            children: [{
              Id: 221,
              label: '三级 2-2-1'
            }]
          }]
        }, {
          Id: 3,
          label: '一级 3',
          children: [{
            Id: 31,
            label: '二级 3-1',
            children: [{
              Id: 311,
              label: '三级 3-1-1'
            }]
          }, {
            Id: 32,
            label: '二级 3-2',
            children: [{
              Id: 321,
              label: '三级 3-2-1'
            }]
          }]
        }],
        treeList: [],
        defaultProps: {
          /** 唯一标识 **/
          value: 'Id',
          /** 标签显示 **/
          label: 'label',
          /** 子级 **/
          children: 'children' }
        //这个是el-select要绑定的数据,等下需要赋值
        form {
            id: "",
            label: ""
         }
      }
/* 注:如果想要展示的data是后端传来的树结构,把data改为res赋值对象 */

3、方法部分

     //节点点击事件
     handleClickNode(data) {
	   this.form.Id = data.Id
	   this.form.label = data.label
	   // 选择器执行完成后,使其失去焦点隐藏下拉框的效果
	   this.$refs.selectTree.blur()
    },

注意:点击事件的data不要改,上面:data属性已经把后端的数据给绑定上了,这里全部写data

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你想要结合`el-select`和`el-tree`,并且希望实现树形结构的多选框,可以按照以下步骤操作: 1. 创建一个`selected`数组,用于存储用户选择的节点。 2. 在`el-select`组件中,设置`multiple`属性为`true`,并将`v-model`指向`selected`数组。 3. 在`el-tree`组件中,设置`show-checkbox`属性为`true`,并将`v-model`指向`selected`数组。 下面是示例代码: ``` <template> <div> <el-select v-model="selected" placeholder="请选择" multiple> <el-option v-for="node in nodes" :key="node.id" :label="node.name" :value="node.id"></el-option> </el-select> <el-tree :data="treeData" :node-key="node => node.id" show-checkbox :default-checked-keys="defaultCheckedKeys" :check-strictly="checkStrictly" :props="props" v-model="selected"></el-tree> </div> </template> <script> export default { data() { return { selected: [], nodes: [ { id: 1, name: '节点1' }, { id: 2, name: '节点2' }, { id: 3, name: '节点3' }, ], treeData: [ { id: 1, label: '一级 1', children: [ { id: 4, label: '二级 1-1', }, ], }, { id: 2, label: '一级 2', children: [ { id: 5, label: '二级 2-1', }, { id: 6, label: '二级 2-2', }, ], }, ], defaultCheckedKeys: [4, 5], checkStrictly: true, props: { children: 'children', label: 'label', value: 'id', checkStrictly: true, emitPath: false, multiple: true, checkDescendants: true, }, } }, } </script> ``` 在这个示例中,我们创建了一个`selected`数组,用于存储用户选择的节点。在`el-select`组件中,我们设置了`multiple`属性为`true`,并将`v-model`指向`selected`数组。在`el-tree`组件中,我们设置了`show-checkbox`属性为`true`,并将`v-model`指向`selected`数组。同时,我们还设置了其他一些属性,例如`checkStrictly`、`props`等,以便实现树形结构的多选框。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值