【扫盲,搞懂框架原理】Vue中@click与@click.native的区别

简介: Vue 维护了自己的事件机制所以就有了原生 DOM 事件和自定义事件的区别

首先得从 Vue 事件机制来分析:


Vue 维护了自己的事件机制所以就有了原生 DOM 事件和自定义事件的区别,比如下面这段官网原话。

用在普通元素上时,只能监听原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。


想必大家都会在自定义组件中自定义事件。

<my-component v-on:my-event="doSomething"></my-component>

那么如何给自定义组价添加原生事件呢,其实想一想理论上是不可行的,因为自定义组件最终不会渲染到页面上,怎么加?

所以Vue给自定义组件绑定原生事件的做法是:把原生事件绑定到组件的根节点,根节点就只有一个嘛…

但是你要告诉vue,当前要给原生节点绑定DOM事件,而不是自定义事件。如下:

<!-- 以下无论你怎么点击hello都不会触发父组件的事件的 -->
<!-- 除非加上@click="$emit('click')",也就是触发自定义事件 -->
<template>
  <div class="hello">
    hello
  </div>
</template>
<template>
  <div id="app">
    <HelloWorld msg="Welcome to Your Vue.js App" @click="clickEvent"/>
  </div>
</template>
<script>
  methods: {
    clickEvent(){
      console.log('事件触发')
    }
  }
</script>

或者直接简单的使用 .native

<HelloWorld msg="Welcome to Your Vue.js App" @click.native="clickEvent"/>

好了,你已经了解了.native的用途。接下来,再说一说原生节点绑定自定义DOM事件。直接看代码如下:

<template>
  <div id="app" @customizedEvent="myEvent">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
  name: 'App',
  components: {
    HelloWorld
  },
  mounted() {
    const app = document.getElementById('app');
    const event = document.createEvent('HTMLEvents');
    event.initEvent('customizedEvent', false, true);
    app.dispatchEvent(event);
  },
  methods: {
    myEvent() {
      console.log('customizedEvent')
    }
  }
}
</script>

我们通过原生的事件派发机制可以触发绑定到原生元素的事件。说明vue帮你做的事情其实是

app.addEventListener('customizedEvent', myEvent, false);

也就是说并非走的组件中的自定义事件,而是原生的DOM事件。




目录
相关文章
|
8月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
713 2
|
7月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
602 137
|
11月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1145 0
|
10月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
723 1
|
10月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
513 0
|
Web App开发 JavaScript 前端开发
Vue框架快速入门
Vue是现在最流行的前端框架之一,而且相对于其他两个框架React和Angular来说也更加易学,而且它的作者是国人,中文文档也很完善。当然Vue框架算是比较高级的框架,所以在使用过程中还需要JavaScript、JavaScript 2015、WebPack、NodeJS、npm、ESLint、JavaScript单元测试框架等其他知识和框架的使用方法。
1532 0
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1432 4
|
11月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
12月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
1645 78
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍

热门文章

最新文章