$listeners详解与使用。.native修饰的事件

1 篇文章 0 订阅
1 篇文章 0 订阅

$listeners

注意不要拼写错误!!!! 

$attrs的内容详见 $attrs和inheritAttrs的详解与使用


官方解释:

 简言之,用v-on绑定的且不用.native修饰的事件。可通过$listeners传递。

例子:

one组件

<template>
  <div>
    one组件
    <!-- <two :name='name' :age='age' @eventOne='eventHandler' @click.native='clickHandler' /> -->
    <two v-bind="{name,age}"  v-on="{eventHandler,clickFun}" @click.native='clickHandler' />
  </div>
</template>
<script>
import two from './two'
export default {
  components: {
    two
  },
  methods: {
    eventHandler (data) {
      console.log(data + '触发了one中的eventHandler')
    },
    clickHandler () {
      console.log('触发了one中的clickHandler')
    },
    clickFun () {
      console.log('这是one的click事件啊')
    }
  },
 
  data () {
    return {
      name: 'jdd',
      age: '20'
    }
  }
}
</script>

two组件:

<template>
  <div>
    这是two组件
    <three v-bind='$attrs' v-on="$listeners" />
  </div>
</template>
<script>
import three from './three'
export default {
  inheritAttrs: true,
  props: ['age'],
  components: {
    three
  },
  mounted () {
    //父组件共传来连个值,一个name, 一个age,由于age被props接收了,故$attrs 只有name属性
    // console.log(this.$attrs) //{name: 'jdd'}
    //父组件监听了三个事件,一个eventHandler, 一个clickFun,由于clickHandler被native修饰了,故$listeners 只有eventOne clickFun事件
    console.log(this.$listeners)
    this.$listeners.eventHandler('two')

    this.$emit('eventHandler', 'two') //可以触发Parent组件中的eventHandler函数
  }
}
</script>

 

three组件:

<template>
  <div>
    这是第三层组件
    <four v-bind='$attrs' v-on="$listeners" />
  </div>
</template>
<script>
import four from './four'
export default {
  components: {
    four
  },
  mounted () {
    //这样one组件就把数据传到了three组件
    //console.log(this.$attrs) // {name: 'jdd'}
    console.log(this.$listeners)
    this.$listeners.eventHandler('three') // 等同与下一行
    //this.$emit('eventHandler', 'three')  //可以触发one组件中的eventHandler函数
  }
}
</script>

 

four组件

<template>
  <div>
    这是第四层组件------第一层组件的消息{{$attrs}}
  </div>
</template>
<script>
export default {
  inheritAttrs: false,
  created () {
    console.log(this.$listeners)
    this.$listeners.eventHandler('four')
    //this.$emit('eventHandler','four') //可以触发Parent组件中的eventHandler函数
  }
}
</script>

 如下图:

.native修饰的事件

官方解释:

如果我想引用一个组件并且添加点击事件,事件需要用.native修饰 ,不然不起作用

    <!-- 这个点击事件无用 -->

    <one @click="oneClick"></one> 

     <!-- 这个点击事件有用 -->

    <one @click.native="oneClick"></one>

$attrs的内容详见 $attrs和inheritAttrs的详解与使用

如有不对的地方欢迎指正。 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值