$listeners和$attrs的使用

Vue中$listeners$attrs的使用其实就是一种简化的替代数据和事件跨级传递的方式,假如有父组件,子组件,孙组件三个组件嵌套,在孙组件上$emit一个事件,在子组件中v-on:$linsteners,这样父组件就可以监听到孙组件上的事件,实际上v-on:$linsteners就是简化了事件子组件中继到父组件的过程,同理$attrs简化了数据由父组件向孙组件传递的过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js中,$attrs和$listeners是两个常用的属性,它们的作用如下: 1. $attrs:包含了父作用域中不被 prop 所识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件。可以在组件中使用 $attrs 来访问这些特性,从而实现组件的透传特性。 2. $listeners:包含了父作用域中 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件,从而实现组件的透传事件。 举个例子,假设有一个父组件 Parent.vue 和一个子组件 Child.vue,Parent.vue模板代码如下: ```html <template> <Child :name="name" v-bind="$attrs" v-on="$listeners" /> </template> <script> import Child from './Child.vue' export default { name: 'Parent', components: { Child }, props: { name: String } } </script> ``` 在这个例子中,我们通过 v-bind="$attrs" 将父组件中的所有非 props 特性(例如 id、class、style等)透传给子组件。同时,通过 v-on="$listeners" 将父组件中除了 .native 修饰器以外的所有事件监听器透传给子组件,这样就可以在子组件中使用这些事件了。 在子组件 Child.vue 中,我们可以这样使用 $attrs 和 $listeners: ```html <template> <div> <input :value="value" @input="$emit('input', $event.target.value)" v-bind="$attrs" v-on="$listeners" /> </div> </template> <script> export default { name: 'Child', props: { value: String } } </script> ``` 在这个例子中,我们通过 v-bind="$attrs" 将父组件中的非 props 特性(例如 id、class、style等)绑定到子组件的 input 元素上,通过 v-on="$listeners" 将父组件中的事件监听器绑定到子组件的 input 元素上,这样就实现了组件的透传特性和透传事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值