vue3和vue2分别对于tree的一键展开和折叠

需求:

点击按钮来控制数的展示折叠

vue3写法
  <template><div class="input-container">
    <el-input v-model="filterText" placeholder="请输入..." />

    <img
      v-if="showDownArrow"
      style="margin-left: 7px"
      src="@/assets/images/down.png"
      @click="toggleTree"
    />
    <img
      style="margin-left: 7px"
      v-else
      src="@/assets/images/top.png"
      @click="toggleTree"
    />
  </div>
  <el-tree
    ref="treeRef"
    class="filter-tree"
    :data="treedata"
    :props="defaultProps"
    node-key="id"
    :filter-node-method="filterNode"
    @node-click="handleNodeClick"
    highlight-current
    default-expand-all
  />
</template>
<style scoped>
.filter-tree {
  margin-top: 10px;
}
.input-container {
  position: relative;
  display: flex;
  align-items: center;
}
</style>

其中输入框和图片用了flex布局

js部分
const treeRef = ref(null);

const showDownArrow = ref(true);//控制出现向上或者向下的图片
const isTreeExpanded = ref(true); //树的展开状态
const toggleTree = () => {
  isTreeExpanded.value = !isTreeExpanded.value;
  showDownArrow.value = !showDownArrow.value;
  // 根据 isTreeExpanded 的值执行展开或折叠
    const treeList = treedata.value;
    for (let i = 0; i < treeList.length; i++) {
      treeRef.value.store.nodesMap[treeList[i].id].expanded =
        isTreeExpanded.value;
    }
};
vue2写法
  

toggleTree(){
  this.isTreeExpanded= !this.isTreeExpanded;
  this.showDownArrow = !this.showDownArrow;
  // 根据 isTreeExpanded 的值执行展开或折叠的逻辑,例如:
    const treeList = this.treedata;
 for (let i = 0; i < treeList.length; i++) {
          this.$refs.treeRef.store.nodesMap[treeList[i].id].expanded = this.isTreeExpanded
        }
};
区别

一个 是  treeRef.value,一个 是this.$refs.treeRef

`vue2-org-tree` 是一个基于 Vue.js 的组织架构树组件,它可以用来在网页中展示树形结构的数据。在使用该组件时,我们常常需要根据实际需求进行一些自定义操作,比如自定义折叠节点的图标、样式或是折叠行为等。 要实现自定义折叠节点,你可以按照以下步骤进行: 1. **自定义展开/折叠图标**:你可以通过插槽(slot)功能来自定义节点展开折叠时的图标。组件通常会提供名为 `default` 的插槽以及 `expand-icon` 和 `collapse-icon` 的插槽,你可以根据需要定义这些插槽。 2. **自定义折叠样式**:你也可以通过 CSS 来修改折叠节点的样式,使其满足你的视觉要求。通常,你可以直接覆盖组件生成的 CSS 类。 3. **自定义折叠行为**:如果需要对节点折叠行为进行更深入的定制,比如添加自定义的动画效果,你可以通过修改组件的 `on-expand` 和 `on-collapse` 事件处理函数来实现。 下面是一个简单的示例代码片段,展示了如何自定义折叠节点图标: ```vue <org-tree :data="data"> <!-- 自定义节点模板 --> <template slot="default" slot-scope="{ node }"> <span>{{ node.label }}</span> </template> <!-- 自定义折叠图标 --> <template slot="expand-icon" slot-scope="{ node }"> <span class="custom-expand-icon">+</span> </template> <template slot="collapse-icon" slot-scope="{ node }"> <span class="custom-collapse-icon">-</span> </template> </org-tree> ``` 在上述代码中,`expand-icon` 和 `collapse-icon` 分别用自定义的 `+` 和 `-` 图标替换了默认图标,当然,你可以根据需要使用图片或者 SVG 图标。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值