(前端)事件的捕获和冒泡/钩子函数

事件的捕获和冒泡

首先,DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。
事件的捕获和冒泡存在于使用addEventListener(event, function, useCapture)方法之后。其中useCapture参数:true,事件捕获状态;false,事件冒泡状态。默认不填,即为false,事件冒泡。
当触发dom事件(event)之后会触发事件捕获和事件冒泡。
事件捕获:浏览器会从根节点开始由外到内进行事件传播,即点击了子元素,如果父元素通过事件捕获方式注册了对应的事件的话,会先触发父元素绑定的事件。
事件冒泡:事件冒泡顺序是由内到外进行事件传播,直到根节点。
注意:dom标准事件流的触发的先后顺序为:先捕获再冒泡

经典例子:

<body>
    <ul id="parent">
        <li id='child1'>子节点</li>
    </ul>
    <script>
        document.getElementById('parent').addEventListener('click',function() {
            console.log('事件捕获'+this.id);
        },true);
        document.getElementById('child1').addEventListener('click',function() {
            console.log('事件捕获'+this.id);
        },true);
        document.getElementById('parent').addEventListener('click',function() {
            console.log('事件冒泡'+this.id);
        });
        document.getElementById('child1').addEventListener('click',function() {
            console.log('事件冒泡'+this.id);
        });
      /*结果:事件捕获parent
      		  事件捕获child1 
      		  事件冒泡child1
      		  事件冒泡parent
      */
    </script>
</body>

钩子函数(vue)##

先看看vue完整的生命周期:图文来源
在这里插入图片描述
钩子函数会在vue实例创建的时候自动调用,不需要手动触发,每个生命周期阶段有相应的钩子函数
1.beforeCreate --创建前
触发的行为:vue实例的挂载元素$el和数据对象data都为undefined,还未初始化。
在此阶段可以做的事情:加loading事件

2.created --创建后
触发的行为:vue实例的数据对象data有了,$el还没有
在此阶段可以做的事情:解决loading,请求ajax数据为mounted渲染做准备

3.beforeMount --渲染前
触发的行为:vue实例的$el和data都初始化了,但还是虚拟的dom节点,具体的data.filter还未替换

4.mounted --渲染后
触发的行为:vue实例挂载完成,data.filter成功渲染
在此阶段可以做的事情:配合路由钩子使用

5.beforeUpdate --更新前
触发的行为:data更新时触发

6.updated —更新后
触发的行为:data更新时触发
在此阶段可以做的事情:数据更新时,做一些处理(此处也可以用watch进行观测)

7.beforeDestroy —销毁前
触发的行为:组件销毁时触发
在此阶段可以做的事情:可向用户询问是否销毁

8.destroyed —销毁后
触发的行为:组件销毁时触发,vue实例解除了事件监听以及和dom的绑定(无响应了),但DOM节点依旧存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值