【发布时间】:2019-02-03 11:46:28
【问题描述】:
我正在努力将现有主题转换为可重复使用的组件。
我目前有一个这样的按钮组件:
<template>
<a :href="link" class="button" :class="styling"><slot></slot></a>
</template>
<script>
export default {
props: {
link: {},
styling: {
default: ''
}
}
}
</script>
而且,在我的 HTML 中,我是这样使用它的:
<vue-button link="#" styling="tiny bg-aqua">Button 1</vue-button>
现在,我正在尝试使用现有的按钮组件创建一个“按钮组”。
我想做的是这样的:
<vue-button-group styling="radius tiny">
<vue-button link="#" styling="tiny bg-aqua">Button 1</vue-button>
<vue-button link="#" styling="tiny bg-aqua">Button 2</vue-button>
<vue-button link="#" styling="tiny bg-aqua">Button 3</vue-button>
<vue-button link="#" styling="tiny bg-aqua">Button 4</vue-button>
</vue-button-group>
我对 VueJS 很陌生,对处理这种事情的正确方法有点困惑。我希望能够根据需要将尽可能多的按钮组件传递到组中。
这是迄今为止我所拥有的按钮组:
<template>
<ul class="button-group" :class="styling">
<li><slot></slot></li>
</ul>
</template>
<script>
export default {
props: {
styling: {
default: ''
}
}
}
</script>
当然,这可以使用传入的单个按钮,但我似乎无法弄清楚如何允许更多,同时将每个按钮包含在自己的列表项中。
非常感谢对我的处理方式提出任何建议或更正。谢谢。
【问题讨论】:
-
作为一个方面没有,你不需要通过
styling="tiny bg-aqua"类是自动绑定的,所以使用class="tiny bg-aqua"具有相同的结果 -
也可能有几种方法来处理这个问题(slots、named Slots、props),最好的解决方案取决于你如何构建数据,以及你想要的最终结果是什么。
-
@Daniel 你是 100% 正确的。我没有意识到你可以在 Vue 组件上使用“class”属性而不覆盖默认包含在组件中的基类。
-
知道了,我误解了问题
-
这在 Vue 中并不完全直截了当。我建议使用渲染函数,但它们并不完全适合初学者。我建议如果这是你可以用 css 解决的问题,那可能更容易实现和维护。
标签: javascript html vue.js vuejs2