小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
vue中自定义组件为什么要加.native?
1.在组件上添加的都是自定义事件
父组件:
子组件:
<template>
<view class="big-wrap">
<!-- 我是子组件 -->
<!-- <view type="default" style="height: 30px;">点击</view> -->
<view type="default" @click="open" class="son">点击</view>
<!-- <view type="default" @click.stop="open" style="height: 30px;">点击</view> -->
</view>
</template>
<script>
export default {
methods:{
open(){
console.log("open");
}
}
}
</script>
<style>
.son{
width: 50px;
height: 50px;
background-color: #4CD964;
}
.big-wrap{
width: 500px;
height: 500px;
background-color:blue;
}
</style>
有时候我们想要给 子组件整体添加一个事件,而不是子组件内部的某个dom元素上添加事件,<a-my-test @click="childClick" ></a-my-test>,这样添加点击事件是不会触发的,因为在自定义组件上注册的事件触发的是组件自定义的事件,根本不是原生的dom事件,既然不是,当然不会触发喽
将上面的模板改成:
<componentA @click.native="clickComponentA" ></componentA>
点击事件就可以触发了, .native修饰符就是用来注册元素的原生事件而不是组件自定义事件的
在封装的组件中,使用点击事件时必须应用native点击才可以生效
vue @click.native 原生点击事件:
1,给vue组件绑定事件时候,必须加上native ,不然不会生效(监听根元素的原生事件,使用.native修饰符)
2,等同于在子组件中:
子组件内部处理click事件然后向外发送click事件:$emit("click".fn)
阻止冒泡行为: