使用自定义Vue组件时如何正确配置Vuetify的v-item-group
问题排查与解决步骤
- 第一步:修复事件绑定语法错误
你当前代码中@click.native="toggle;"的写法存在问题,末尾多余的分号会导致仅声明函数引用而不执行,直接修改为以下任意一种写法即可:
<!-- 写法1:直接绑定函数引用 --> @click.native="toggle" <!-- 写法2:显式调用函数 --> @click.native="toggle()"
- 第二步:适配不同Vue版本的事件规则
- 如果你使用的是Vue 3,
.native修饰符已经被官方移除,该写法会直接失效。此时你需要修改fm-card组件的内部实现,在组件根元素上绑定点击事件并向外抛出:
同时在父组件中去掉<!-- fm-card组件内部根元素 --> <div class="fm-card-root" @click="$emit('click', $event)"> <!-- 组件原有内容 --> </div>.native修饰符,直接用@click="toggle"绑定即可。- 如果你使用的是Vue 2,确认
fm-card的根元素没有添加@click.stop等阻止事件冒泡的修饰符,否则原生点击事件无法向外传递到父组件绑定的监听器。
- 如果你使用的是Vue 3,
- 第三步:验证v-item插槽参数是否正常
你可以在模板中临时输出toggle的类型确认插槽参数是否正确获取:
{{ typeof toggle }}
如果输出结果不是function,说明你当前Vuetify版本的v-item作用域插槽语法存在差异,可查阅对应版本的官方文档调整插槽写法。
- 第四步:排查元素层级拦截问题
打开浏览器开发者工具的元素选择器,直接点击页面上的fm-card组件,确认选中的元素是否为绑定了点击事件的fm-card实例。如果选中的是其他透明遮罩层元素,给fm-card添加z-index: 10(数值可根据实际情况调整)即可解决事件拦截问题。 - 第五步:定位问题归属
临时将fm-card替换为Vuetify原生的v-card组件绑定点击事件,如果切换功能恢复正常,说明问题完全出自自定义fm-card的事件透传逻辑,优先排查该组件的内部实现即可。
内容的提问来源于stack exchange,提问作者DIEGO ALEJANDRO SARMIENTO CHAR
相关产品推荐
相关产品推荐

