挖到宝了!快来看看new Evenet中的惊喜功能
new Event
简介
对于前端同学来说,new Event
可能是个比较陌生的概念,因为他的使用率很低!但其实,它非常大的强大好用!我们先看看官方api的介绍:
创建和触发事件
Event()
构造函数,创建一个新的事件对象 Event。
event = new Event(typeArg, eventInit);
参数:
// 创建一个支持冒泡且不能被取消的 look 事件
var ev = new Event("look", { bubbles: true, cancelable: false });
document.dispatchEvent(ev);
// 事件可以在任何元素触发,不仅仅是 document
myDiv.dispatchEvent(ev);
官方的介绍确实不多,很难让人眼前一亮,但仔细阅读,你会发现他最大的用途:
new Event
可以通过创建和触发自定义事件,使我们在程序中实现更加灵活和松耦合的模块间通信。
使用场景
基于它的能力,我们能得出它的使用场景
- 模块间通信:当一个模块的状态改变,需要通知其他模块时,可以使用自定义事件进行通信。
- 自定义行为:在特定条件下触发特定行为,而不是依赖于预定义的 DOM 事件。
- 增强现有组件:为现有的组件添加新功能,而不需要修改组件的内部实现。
最佳实践
基础自定义事件
下面是一个简单的示例,演示如何创建、监听和触发自定义事件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>new Event学习</title>
</head>
<body>
<button id="myButton">点击我</button>
<script>
// 1. 创建自定义事件
let myEvent = new Event('myCustomEvent');
// 2. 获取按钮元素
let button = document.getElementById('myButton');
// 3. 监听自定义事件
button.addEventListener('myCustomEvent', function (e) {
console.log('啊,我是按钮,我被点击了!');
});
// 4. 点击按钮时触发自定义事件
button.addEventListener('click', function () {
button.dispatchEvent(myEvent);
});
</script>
</body>
</html>
在上面的例子中,当我们点击按钮时,会触发自定义事件 myCustomEvent
,并在控制台输出消息,是不是非常好用!
可传递数据的自定义事件
有时我们可能需要传达数据,我们可以同样可以使用 CustomEvent
来实现这一点。
CustomEvent接口继承其父接口 Event 的属性,用法是一致的,但更强大
<template>
<div>
<button @click="triggerEvent">Click me</button>
</div>
</template>
<script>
import { ref, onMounted } from 'vue';
export default {
setup() {
const myEvent = new CustomEvent('myCustomEvent', {
detail: { message: '这是加密数据!' }
});
const triggerEvent = () => {
window.dispatchEvent(myEvent);
};
onMounted(() => {
window.addEventListener('myCustomEvent', (e) => {
console.log('自定义数据被触发!');
console.log('这是数据内容:', e.detail);
});
});
return {
triggerEvent
};
}
};
</script>
在不同组件之间,我们也完全可以借助它实现数据交互
<template>
<div>
我是A组件
<button @click="triggerEvent">点击我</button>
</div>
</template>
<script>
import { ref, onMounted } from 'vue';
export default {
setup() {
const myEvent = new CustomEvent('myCustomEvent', {
detail: { message: '这是加密数据!' }
});
const triggerEvent = () => {
window.dispatchEvent(myEvent);
};
return {
triggerEvent
};
}
};
</script>
<template>
<div>
我是B组件
</div>
</template>
<script setup>
onMounted(() => {
window.addEventListener('myCustomEvent', (e) => {
console.log('我接受到A组件的数据内容了!!');
console.log('这是数据内容:', e.detail);
});
});
</script>
可以看出来,它非常的好用!
转载自:https://juejin.cn/post/7393312386349219874