naive UI 折叠面板设置折叠面板的可点击区域

本文介绍了如何解决NaiveUI折叠面板在点击header时全局展开/折叠的问题。通过利用受控模式,自定义箭头图标并添加点击事件,实现了仅点击箭头图标控制面板折叠的效果。同时,指出了鼠标光标在header其他区域仍显示可点击状态的不足。
摘要由CSDN通过智能技术生成

我在使用naive UI 的折叠面板时,他有个特点,就是无论点击header的哪个位置,都会展开/折叠面板。且组件没有提供api设置可点击区域

这个特点会带来一个问题,比如如下场景:

由于我在header上设置的内容比较复杂,有按钮,导致这么一个问题,我点击自己的按钮,也会展开或折叠面板,那么就没办法友好的使用我自己的按钮了。
在这里插入图片描述

所以,我希望,只有点击左边的箭头图标时,才会展开或折叠面板。

解决方案

利用naive提供的受控模式,即点击面板的header之后,是否展开由我决定,而不是组件自己决定。

通过自定义那个箭头图标,并且给他添加点击方法,通过该点击方法去控制面板的折叠与展开,这样,就可以达到点击箭头图标来控制折叠面板了。

方法

<template>
    <!-- 使用expanded-names参数开启受控模式 -->
    <n-collapse :expanded-names="collapseExpanded">
        <!-- 面板子项的name和onItemHeaderClick的入参必须保持一致 -->
        <n-collapse-item :name="index" v-for="index in 5">
            <!-- 设置自定义图标,并且添加点击方法 -->
            <template #arrow>
                <n-icon @click="onItemHeaderClick(index)">
                    <IosArrowForward />
                </n-icon>
            </template>
            <!-- header中包含button -->
            <template #header>
                <n-descriptions>
                    <n-descriptions-item>
                        <template #label>操作</template>
                        <n-space>
                            <n-button size="small">修改</n-button>
                            <n-button size="small">删除</n-button>
                        </n-space>
                    </n-descriptions-item>
                </n-descriptions>
            </template>
        </n-collapse-item>
    </n-collapse>
</template>
<script lang="ts" setup>
    import { ref } from "vue";
    import { IosArrowForward } from "@vicons/ionicons4"; // 引入自定义的箭头图标

    const collapseExpanded = ref(new Array<number>()); // 数组里包含的,就是展开的面板子项的name

    // 箭头图标的点击方法,入参数面板子项的name
    function onItemHeaderClick(index: number) {
        // 由于我们并不知道本次点击面板是要折叠还是展开,所以需要搜索看看collapseExpanded里面有没有,有的话就说明要折叠
        const findIndex = collapseExpanded.value.findIndex(
            (item) => item == index
        );
        // 判断是折叠还是展开
        if (findIndex >= 0) {
            collapseExpanded.value.splice(findIndex, 1);
        } else {
            collapseExpanded.value.push(index);
        }
    }
</script>
<style lang="scss" scoped></style>

不足

鼠标放到header的其他位置,鼠标依然会变成小手,给人一种可点击的错觉,没找到可以修改该样式的方法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值