找回密码
 立即注册
查看: 594|回复: 0

[前端] element UI 中的 el-tree 实现 checkbox 单选框功能,及 bus 传递参数的方法

[复制链接]

224

主题

0

回帖

773

积分

高级会员

积分
773
发表于 2024-6-6 11:43:38 | 显示全部楼层 |阅读模式
本帖最后由 御坂主机 于 2024-6-6 20:53 编辑

1. 引言

在使用 Element UI 进行开发时,`el-tree` 是一个非常强大的组件,广泛应用于各种场景。然而,有时我们需要实现 `el-tree` 中的 checkbox 单选框功能,这在原生组件中并不直接支持。本文将介绍如何实现这一功能,并探讨通过事件总线 (bus) 传递参数的方法。

1.1 需求分析

在某些应用场景中,我们希望用户在 `el-tree` 中只能选择一个 checkbox,而不是默认的多选功能。同时,我们需要在不同组件之间传递参数,这可以通过事件总线来实现。

2. 实现 el-tree 中的 checkbox 单选框功能

2.1 准备工作

首先,确保你已经安装并引入了 Element UI。如果还没有安装,可以通过以下命令进行安装:

  1.     npm install element-ui
复制代码


在主入口文件中引入 Element UI:

  1.     import Vue from 'vue';
  2.     import ElementUI from 'element-ui';
  3.     import 'element-ui/lib/theme-chalk/index.css';
  4.     Vue.use(ElementUI);
复制代码


2.2 自定义 el-tree 的单选功能

由于 `el-tree` 默认是多选的,我们需要通过监听 checkbox 的点击事件来实现单选功能。具体实现如下:

  1.     <template>
  2.       <el-tree
  3.         :data="treeData"
  4.         show-checkbox
  5.         node-key="id"
  6.         default-expand-all
  7.         @check-change="handleCheckChange">
  8.       </el-tree>
  9.     </template>

  10.     <script>
  11.     export default {
  12.       data() {
  13.         return {
  14.           treeData: [
  15.             {
  16.               id: 1,
  17.               label: 'Level one 1',
  18.               children: [
  19.                 {
  20.                   id: 4,
  21.                   label: 'Level two 1-1',
  22.                   children: [
  23.                     {
  24.                       id: 9,
  25.                       label: 'Level three 1-1-1'
  26.                     },
  27.                     {
  28.                       id: 10,
  29.                       label: 'Level three 1-1-2'
  30.                     }
  31.                   ]
  32.                 }
  33.               ]
  34.             },
  35.             {
  36.               id: 2,
  37.               label: 'Level one 2',
  38.               children: [
  39.                 {
  40.                   id: 5,
  41.                   label: 'Level two 2-1'
  42.                 },
  43.                 {
  44.                   id: 6,
  45.                   label: 'Level two 2-2'
  46.                 }
  47.               ]
  48.             },
  49.             {
  50.               id: 3,
  51.               label: 'Level one 3',
  52.               children: [
  53.                 {
  54.                   id: 7,
  55.                   label: 'Level two 3-1'
  56.                 },
  57.                 {
  58.                   id: 8,
  59.                   label: 'Level two 3-2'
  60.                 }
  61.               ]
  62.             }
  63.           ]
  64.         };
  65.       },
  66.       methods: {
  67.         handleCheckChange(data, checked, indeterminate) {
  68.           if (checked) {
  69.             this.$refs.tree.setCheckedKeys([data.id]);
  70.           }
  71.         }
  72.       }
  73.     };
  74.     </script>
复制代码


在这个示例中,我们通过监听 `check-change` 事件,并在用户选中某个节点时,调用 `setCheckedKeys` 方法只选中当前节点,从而实现单选功能。

3. 通过 bus 传递参数

在 Vue 中,组件之间的通信通常使用 Vuex,但在一些简单场景下,使用事件总线 (bus) 也是一种有效的方法。接下来,我们介绍如何通过 bus 在不同组件之间传递参数。

3.1 创建事件总线

首先,在项目的主入口文件中创建一个事件总线:

  1.     // main.js
  2.     import Vue from 'vue';
  3.     const bus = new Vue();
  4.     Vue.prototype.$bus = bus;
复制代码


3.2 在组件中使用事件总线

在发送参数的组件中,可以通过 `this.$bus.$emit` 方法发送参数:

  1.     <template>
  2.       <el-button @click="sendData">发送数据</el-button>
  3.     </template>

  4.     <script>
  5.     export default {
  6.       methods: {
  7.         sendData() {
  8.           this.$bus.$emit('sendData', { msg: 'Hello from Component A' });
  9.         }
  10.       }
  11.     };
  12.     </script>
复制代码

在接收参数的组件中,可以通过 `this.$bus.$on` 方法接收参数:

  1.     <template>
  2.       <div>{{ message }}</div>
  3.     </template>

  4.     <script>
  5.     export default {
  6.       data() {
  7.         return {
  8.           message: ''
  9.         };
  10.       },
  11.       created() {
  12.         this.$bus.$on('sendData', (data) => {
  13.           this.message = data.msg;
  14.         });
  15.       }
  16.     };
  17.     </script>
复制代码


4. 结论

本文介绍了如何在 Element UI 的 `el-tree` 组件中实现 checkbox 单选功能,并通过事件总线在不同组件之间传递参数。通过这些方法,可以有效提升项目的开发效率和代码的可维护性。希望本文对你有所帮助,在实际项目中能够应用这些技巧。



------------------------------------------------------------------------------------------------------------------------------------------

========  御 坂 主 机  ========

>> VPS主机 服务器 前沿资讯 行业发布 技术杂谈 <<

>> 推广/合作/找我玩  TG号 : @Misaka_Offical <<

-------------------------------------------------------------------------------------------------------------------------------------------

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:54 , Processed in 0.053939 second(s), 23 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表