如上,我想做一个组件,里面有N个按钮(会根据不同状态显隐),当按钮数量小于3个时 全部显示出来,当按钮数量大于3个时 只显示前3个,然后自动显示一个更多按钮,点击更多后以弹框的形式显示其他按钮。
本来是想不用插槽,通过json数组的方式把按钮数据传到组件里,在组件里生成按钮,但是这样用起来不是很方便。
改成插槽后的写法:
父组件
<btns>
<btn v-if="false">1</btn1>
<btn v-if="false">2</btn1>
<btn v-if="true">3</btn1>
<btn v-if="false">4</btn1>
<btn v-if="true">5</btn1>
<btn v-if="true">6</btn1>
<btn v-if="true">7</btn1>
</btns>
子组件
this.$slots["default1"] = this.$slots.default.slice(0, 3);
this.$slots["default2"] = this.$slots.default.slice(3);
<slot name="default1"></slot>
<slot name="default2"></slot>
我想把默认插槽里面的数据拆分成default1和default2两部分,但渲染不出来,请问有其他什么方法吗。
或者说不用这个思路,要做这种类型的组件,大家觉得应该怎么写,才能让使用者用起来最方便
首先理下需求,如上图,有一个按钮组,里面最多有N个按钮(按不同条件显示不同按钮),当显示的按钮超过3个时,只显示前3个,然后在左侧或者右侧显示一个更多按钮,点击后弹出剩下的按钮。
这里有如下两次使用方法。
第一种使用方法我觉得太繁琐了。
所以优先考虑第二种写法。
然后第二种写法的核心问题就是怎么把插槽里面的按钮拆分成 默认显示的 和 更多弹框中 的两部分。
这里没找到很好的方法,然后我想到了用css变相解决