vue的<slot>列表要怎么动态添加一些class或属性?
main.vue
<menu> <template slot="item">
菜单一
</template>
<template slot="item">
菜单二
</template>
</menu>
menu.vue
<div class="menu-list"> <slot name="item" />
</div>
我需要在 menu.vue 中动态给所有item添加class和计算每个item的位置,不知道要怎么弄,求大佬解答
补充:
我需要计算动态各个菜单项的位置top、left等值,如果放在main.vue加class样式和计算的话,以后就复用不了,我需要把所有逻辑计算都封装在menu.vue中。有人建议用list传入菜单项,再遍历进行计算,但这有个缺点就是菜单项里面要加些图标、html标签等就变得很麻烦,大家还有好的解决方案吗?
回答:
<div class="abc">菜单一</div>
不就得了,slot 又不是只支持文字,标签也是支持的
回答:
main.vue
<menu> <template slot="item">
<div
v-for="(item, index) in menuList"
:key="index"
:class="item.className"
:style="item.style">
<i :class="item.icon" v-if="item.icon"><i>
{{ item.name}}
<div v-if="item.html" v-html="item.html"></>
</div>
</template>
</menu>
<script setup>
import { reactive } from 'vue'
let menuList = reactive([
{
name: '菜单一',
className: 'menuItem1',
icon: 'icon-item-1',
html: '<div>html</div>'
style: {
position: relative,
left: '',
top: ''
}
}
...
])
</script>
回答:
vue2的话可以拿到插槽里面的vnode,在vnode挂载后可以拿到对应的dom,想怎么搞怎么搞
以上是 vue的<slot>列表要怎么动态添加一些class或属性? 的全部内容, 来源链接: utcz.com/p/932950.html