【发布时间】:2022-07-15 09:13:05
【问题描述】:
我正在尝试为 Vuetify Stepper 组件创建一个组件包装器。 我的目标是简单地创建一个包装器,以便我可以应用一些 CSS 覆盖。
所以我想把所有的$attrs、$listeners、$slots都传下去。
我不想改变任何行为/js。
这是我的my-stepper.vue:
<template>
<v-stepper v-bind="$attrs" v-on="$listeners">
<slot></slot>
</v-stepper>
</template>
<script>
export default {
name: "my-stepper",
inheritAttrs: false,
};
</script>
<style lang="scss">
// Fix issue with the vertical stepper component in vuetify
.v-stepper.v-stepper--vertical .v-stepper__content.active > .v-stepper__wrapper {
height: auto !important; // allow the active step to have automatic height (if child change)
padding: 4px; // fix an overflow issue
}
</style>
我像这样使用这个组件:
<my-stepper vertical v-model="currentStepNumber" elevation="0">...</my-stepper>
但是现在,当我使用 my-stepper 时,我在 Chrome 中收到以下错误:
[Vuetify] [BREAKING] '@input' has been removed, use '@change' instead. For more information, see the upgrade guide https://github.com/vuetifyjs/vuetify/releases/tag/v2.0.0#user-content-upgrade-guide.
当我删除 v-on="$listeners" 时,此错误消失,但我需要它来传递事件。不是吗?
感谢任何有关简单组件包装器的帮助或建议。
【问题讨论】:
-
您没有显示
my-stepper的使用方式。也许您在上面添加了@input,然后通过$listeners传递给v-stepper? -
@doesnotmatter 我更新了问题以添加我如何使用
my-stepper。我有一个v-model。 -
这解释了为什么您会收到
@input事件。v-model只是@input+:value的语法糖。文档:vuejs.org/v2/guide/components.html#Using-v-model-on-Components
标签: javascript vue.js vuejs2 vuetify.js