vue解决el-select选中一个option绑定的id,想取出该option中的其他属性值(树形选择框)

封装公共方法

/**
 * @description: 解决select选中一个option绑定的id,想取出该option中的其他属性值
 * 场景:选中值后不但要传id,还要额外传递该选中的option中的其他值给后端,一般用于最后接口传参处理参数使用
 * @param {string|number} value 选中的option的id
 * @param {Array} options option数组,可能包含嵌套结构
 * @param {string} key 需要取出的属性值的key
 * @return {string} 返回属性值,若未找到则返回空字符串
 * @example:
 * const options = [{id: 1, name: '张三', children: [{id: 2, name: '李四'}]}]
 * const value = 2
 * const key = 'name'
 * const result = getOptionValueRecursive(value, options, key)
 */
export function getOptionValueRecursive(
  value: string | number,
  options: Array<any>,
  key: string
): string {
  for (const option of options) {
    if (option.id === value) {
      return option[key];
    }
    if (option.children && option.children.length > 0) {
      const nestedResult = getOptionValueRecursive(value, option.children, key);
      if (nestedResult) {
        return nestedResult;
      }
    }
  }
  return "";
}

### 实现 Vue2 中带有树形结构的下拉单选框 为了实现在 `Vue2` 项目中使用 `Element UI` 的 `el-select`, `el-option` 和 `el-tree` 组件来创建一个可以显示并选择树状结构数据的下拉菜单,可以通过自定义渲染函数或插槽机制完成这一需求[^1]。 #### 定义模板部分 在 HTML 或者 `.vue` 文件中的 `<template>` 部分定义如下: ```html <el-select v-model="selectedValue" placeholder="请选择"> <el-option> <!-- 使用作用域插槽 --> <el-tree :data="treeData" show-checkbox node-key="id" ref="tree" @check-change="handleCheckChange"></el-tree> </el-option> </el-select> ``` 这里需要注意的是,在实际应用时可能需要调整属性配置以适应具体业务逻辑。比如上面例子中设置了 `show-checkbox=true` 来允许多选;而如果是做单选,则应该去掉这个选项,并通过其他方式处理节点点击事件[^2]。 #### 编写脚本部分 接着是在 JavaScript (ES6+) 脚本里初始化组件状态以及方法: ```javascript export default { data() { return { selectedValue: '', // 当前被选中的值 treeData: [ /* 这里放置你的树形结构的数据 */ ] }; }, methods: { handleCheckChange(data, checked) { if(checked){ this.selectedValue = data.id; } } } } ``` 上述代码片段展示了如何监听树节点的选择变化,并据此更新绑定给 `el-select` 的模型变量 `selectedValue` 。对于单选的情况来说,当某个节点被勾选时即视为选择了该项,因此可以直接将其 ID 设置为目标值。 另外值得注意的一点是,由于默认情况下 `el-tree` 是用于展示层级关系而非作为选项列表使用的,所以在样式上可能会有所差异。可以根据实际情况调整 CSS 样式使得其更接近传统意义上的下拉菜单外观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值