Vue.js 项目中二次封装一个按钮组件

Vue2 中容易被忽略的两个重要的 API 介绍

Vue2 中封装

 1<template>
 2  <a-button
 3    icon="sync"
 4    title="刷新"
 5    v-bind="$attrs"
 6    v-on="$listeners"
 7  />
 8</template>
 9
10<script>
11/**
12 * 和 a-button 外观、行为完全一致
13 * 区别是预设 icon 和 title 属性
14 */
15export default {
16  inheritAttrs: false,
17}
18</script>

Vue3 中有了一些变化

移除 $listeners (非兼容)

 1<template>
 2  <a-button
 3    icon="sync"
 4    title="刷新"
 5    v-bind="$attrs"
 6  />
 7</template>
 8
 9<script>
10/**
11 * 和 a-button 外观、行为完全一致
12 * 区别是预设 icon 和 title 属性
13 */
14export default {
15  inheritAttrs: false,
16}
17</script>

升级到 Vue3.x 之后,$attrs$listeners 合并到 $attrs 中,因此直接删除 $listeners 即可,但是要保留 $attrs

uniapp 中的一个坑

uni-app 仅在 H5 端和 App端V3 中支持 $listeners, 小程序不支持 $listeners ,这就导致了

实例属性 - uni-app