vue点击事件之@click.native

12,834 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

vue中自定义组件为什么要加.native?

1.在组件上添加的都是自定义事件

父组件:

image.png 子组件:

image.png

    <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>

image.png

有时候我们想要给 子组件整体添加一个事件,而不是子组件内部的某个dom元素上添加事件,<a-my-test @click="childClick" ></a-my-test>,这样添加点击事件是不会触发的,因为在自定义组件上注册的事件触发的是组件自定义的事件,根本不是原生的dom事件,既然不是,当然不会触发喽

将上面的模板改成:

<componentA @click.native="clickComponentA" ></componentA>

image.png image.png 点击事件就可以触发了, .native修饰符就是用来注册元素的原生事件而不是组件自定义事件的

在封装的组件中,使用点击事件时必须应用native点击才可以生效

vue @click.native 原生点击事件:

1,给vue组件绑定事件时候,必须加上native ,不然不会生效(监听根元素的原生事件,使用.native修饰符)

2,等同于在子组件中:

子组件内部处理click事件然后向外发送click事件:$emit("click".fn)

阻止冒泡行为:

image.png

image.png

image.png image.png