vue中@click与@click.native,及其vue事件机制的分析

news/2024/7/19 15:53:50 标签: vue, js, dom, javascript

vue维护了自己的事件机制

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

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

本文也将围绕这一句话展开。

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

javascript"><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>javascript">
  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>javascript">
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帮你做的事情其实是

javascript">app.addEventListener('customizedEvent', myEvent, false);

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

–完…


http://www.niftyadmin.cn/n/1382938.html

相关文章

自己手写一个SpringMVC框架(简化)

Spring框架对于Java后端程序员来说再熟悉不过了&#xff0c;以前只知道它用的反射实现的&#xff0c;但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的源码&#xff0c;你将会失去一次和大师学习的机会&#xff1a;它的代码规范&#xff0c;设计思想很值得学习。我们…

对”唯一键可以包含NULL值,并且每个NULL值都是唯一的(即NULL!=NULL)“理解...

因为最近在写一篇关于字符串模糊检索的论文&#xff0c;开始比较细致的研究数据库&#xff08;MySQL&#xff09;中的index问题&#xff0c;变到图书馆借了本《Effective MySQL之SQL语句最优化》&#xff08;Ronald Bradford著&#xff0c;李雪峰译&#xff09;。今天在里面看到…

开发规范浅谈

在做项目的过程中&#xff0c;有很多“奇怪”的缺陷&#xff1a;本地好好的&#xff0c;到了测试环境&#xff08;换个机器、换个浏览器……&#xff09;就不行&#xff0c;有时都快冒火了&#xff0c;缺陷愣是解决不了&#xff1b;过后呢&#xff0c;不经意的又弄好了。。。而…

1 error in child compilations webpack 5

出现这个错误原因可能是有很多&#xff0c;但该错误并不会打印出错误的堆栈信息。 [webpack-cli] Compilation finished assets by status 15 bytes [cached] 1 asset ./temp.js 14 bytes [built] [code generated] 1 ERROR in child compilations webpack 5.10.2 compiled wi…

任正非对研究部门的方向指导

一、不打卡、出去多交流、多想象未来生活是什么样一杯咖啡吸收宇宙的力量交流也是在提升我们自己&#xff0c;由于我们真的想不清楚未来是什么。华为公司的圈子还太小&#xff0c;你们这些fellow都不出去喝咖啡&#xff0c;仅仅守在土围子里面&#xff0c;守碉堡终于也守不住。…

09、Modules - Directory根据目录加载模块文件

1、创建WPF应用程序Modules&#xff0c;创建类库ModuleA。在Modules的bin目录下创建文件夹Modules&#xff0c;并将ModuleA的生成路径设置为Modules文件夹。 2、在Modules中&#xff0c;将App.xaml中的StartupUri"MainWindow.xaml"删除。 3、在Modules中&#xff0c;…

​linux常见目录的了解

2019独角兽企业重金招聘Python工程师标准>>> linux常见目录的了解 /bin/ 存放系统命令的目录&#xff0c;普通用户和超级用户都可以执行&#xff0c;存放在/bin 下的命令在当用户模式下也可以执行/sbin/ 保存和系统环境设置相关的命令&#xff0c;只有超…

git中文件未区分大小写的原因以及如何解决

项目开发的时候给文件重命名是常见的操作。但如果仅仅是改变了大小写会怎样呢&#xff1f; λ ls README.txtλ mv README.txt Readme.txtλ git status On branch master nothing to commit, working tree clean竟然完全不生效… 说到为什么会这样&#xff0c;不知道大家有没…