uni-app什么时候能支持v-bind, $attrs和$listeners呢?

发布于 1周前 作者 vueper 来自 Uni-App

uni-app什么时候能支持v-bind, $attrs和$listeners呢?
觉得这个还是很常用的。
编译时提示暂不支持,切到源码,看到有:

```javascript const traverses = {
_c: traverseCreateElement,
_t: traverseRenderSlot,
_l: traverseRenderList,
_u: traverseResolveScopedSlots,
_v: traverseCreateTextVNode,
_e: traverseCreateEmptyVNode,
_g: ‘暂不支持 v-on="$listeners" 用法’,
_b: ‘暂不支持 v-bind="" 用法’
} ```


25 回复

Error: 暂不支持 v-on="$listeners" 用法 这个功能很方便,希望能解决一下

2019提过的到2022年都还不支持。。。

23年3月依旧不支持

23年4月了,依旧不支持

回复 2***@qq.com: 23年11月了,依旧不支持

旧的组件模式好像是支持的。新的就不支持了。呵呵。

在对UI框架二次封装的时候发现使用attrs编译失败,真的希望编译工具能尽早支持

同求啊,这么有用的特性竟然都没有????

2022年9月份了,什么时候支持

11月了依旧不支持唉

艹,这么好用的东西居然不支持

2023年9月了,依旧不支持

刚好我也在 找。。。

2023年10月11日10:14:25 依旧不支持

2023年12月还不行 哈哈哈

2024年8月6号 还是不支持

2024.8.22还是不支持

2024.12.31还是不支持

2025.1.6 依旧不支持,如果官方不打算支持,就不要提示 Error: 暂不支持 v-on="$listeners" 用法,什么叫暂不支持,还是要多读点书

啊,原来不支持的啊,我还打算对uview,进行二次封装的。看样子要放弃这个想法了。

关于uni-app何时能支持Vue.js中的v-bind, $attrs$listeners,这主要取决于uni-app框架的更新迭代和社区反馈。不过,我们可以探讨如何在当前uni-app框架下,通过一些替代方案或技巧来实现类似的功能。

1. v-bind 替代方案

在uni-app中,v-bind主要用于动态绑定属性,这在uni-app中已经被原生支持。例如:

<template>
  <view :style="dynamicStyle">Hello, uni-app!</view>
</template>

<script>
export default {
  data() {
    return {
      dynamicStyle: {
        color: 'red',
        fontSize: '20px'
      }
    }
  }
}
</script>

上述代码中的:style就是v-bind:style的简写,用于动态绑定样式。

2. $attrs$listeners 替代方案

在Vue.js中,$attrs包含了父作用域中不作为prop被识别(且获取)的特性绑定(class和style除外),$listeners包含了父作用域中的(不含.native修饰器的)v-on事件监听器。

在uni-app中,虽然直接访问$attrs$listeners可能受限,但我们可以通过其他方式模拟这些功能。

替代 $attrs

可以通过props传递所有需要的属性,并在子组件中手动处理这些属性。

<!-- 父组件 -->
<template>
  <child-component v-bind="allProps"></child-component>
</template>

<script>
export default {
  data() {
    return {
      allProps: {
        someProp: 'value',
        anotherProp: 123
      }
    }
  }
}
</script>
<!-- 子组件 -->
<template>
  <view>{{ someProp }} - {{ anotherProp }}</view>
</template>

<script>
export default {
  props: ['someProp', 'anotherProp']
}
</script>

替代 $listeners

可以通过$emit在子组件中触发父组件的事件监听器,并在父组件中显式绑定这些事件。

<!-- 父组件 -->
<template>
  <child-component @custom-event="handleCustomEvent"></child-component>
</template>

<script>
export default {
  methods: {
    handleCustomEvent(data) {
      console.log(data);
    }
  }
}
</script>
<!-- 子组件 -->
<template>
  <button @click="triggerEvent">Click me</button>
</template>

<script>
export default {
  methods: {
    triggerEvent() {
      this.$emit('custom-event', { message: 'Hello from child' });
    }
  }
}
</script>

通过这些替代方案,我们可以在uni-app中模拟Vue.js中的$attrs$listeners功能。不过,随着uni-app框架的不断完善,这些特性可能会被原生支持,建议持续关注uni-app的更新日志。

回到顶部