递归组件 TreeView.vue
其中 treeButton 这个slot需要传递进递归的组件内

<template>
  <ul>
    <template v-for="item in treeData" :key="item.key">
      <li v-if="item.children" class="tree-branch">
        <div class="tree-branch-header" @click="toggleShowChildren(item)">
          <span class="tree-branch-name">
            <span class="tree-label">{{ item.title }}</span>
          </span>
          <slot name="treeButton" v-bind="item"></slot>
        </div>
        <tree-view v-if="item.showChildren" :data="item.children" :parent="item">
          <template #treeButton="subItem">
            <slot name="treeButton" v-bind="subItem"></slot>
          </template>
        </tree-view>
      </li>
      <li v-else class="tree-item">
        <span class="tree-item-name">
          <icon-font v-if="item.selected" icon="check" />
          <icon-font v-else icon="times" />
          <span class="tree-label">{{ item.title }}</span>
        </span>
        <slot name="treeButton" v-bind="item"></slot>
      </li>
    </template>
  </ul>
</template>

看下递归的部分

<tree-view v-if="item.showChildren" :data="item.children" :parent="item">
  <template #treeButton="subItem">
    <slot name="treeButton" v-bind="subItem"></slot>
  </template>
</tree-view>

最重要的就是

<template #treeButton="subItem">
  <slot name="treeButton" v-bind="subItem"></slot>
</template>

然后调用时传入slot

<tree-view
    tree-title="产品分类"
    :multiple="multiple"
    :data="treeData"
>
  <template #treeButton="{ key }">
    <span class="tree-button">
      <icon-font icon="edit" :size="17" class="m-r-5" @click.stop="handleEdit(key)" />
      <icon-font icon="ashbin" :size="17" class="m-r-5" @click.stop="handleDelete(key)" />
    </span>
  </template>
</tree-view>

效果如下图:

最后修改:2023 年 07 月 19 日
如果觉得我的文章对你有用,请随意赞赏