vue监听子组件生命周期

博客介绍了Vue中父组件监听子组件生命周期的简便方式。常规写法较复杂,而通过在父组件引用子组件时用@hook监听,子组件无需额外处理。不仅能监听mounted,created、updated等生命周期事件也适用,十分方便。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

偶尔看到的,觉得很好玩:

比如有父组件Parent和子组件Child,如果父组件监听到子组件挂载mounted就做一些逻辑处理,常规的写法可能如下:

// Parent.vue
<Child @mounted="doSomething"/>

// Child.vue
mounted() {
  this.$emit("mounted");
}

这里提供一种特别简单的方式,子组件不需要任何处理,只需要在父组件引用的时候通过@hook来监听即可,代码重写如下:

<Child @hook:mounted="doSomething"/>

当然这里不仅仅是可以监听mounted,其它的生命周期事件,例如:created,updated等都可以,是不是特别方便~

原作者链接:https://juejin.im/post/5ce3b519f265da1bb31c0d5f

### Vue 2 子组件生命周期函数详解 在 Vue 2 中,子组件生命周期与其父级组件相似,但有一些特定的行为和触发顺序需要注意。以下是详细的生命周期钩子及其说明: #### 创建阶段 - **beforeCreate**: 实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用[^3]。 - **created**: 完成 data 和 methods 的初始化后立即执行此钩子,在这个阶段可以访问到 this 上的数据。 #### 模板编译与挂载前 - **beforeMount**: 在挂载开始之前被调用:相关的 render 函数首次被调用。 #### DOM 渲染完成后的回调 - **mounted**: el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果根实例挂载到了一个文档内的元素上,则 mounted 阶段会在页面加载完成后立刻启动。 #### 更新周期 - **beforeUpdate**: 数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。 - **updated**: 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以现在可以执行依赖于 DOM 的操作。 #### 销毁过程 - **beforeDestroy**: 实例销毁之前调用。在这一步,实例仍然完全可用。 - **destroyed**: 当实例被销毁后调用。此时所有的事件监听器已经被清除,所有的子组件也都已经被卸载。 对于子组件来说,除了上述标准的生命周期外,还有两个特别重要的钩子: - **activated** 和 **deactivated**, 这些只适用于 `<keep-alive>` 包裹下的组件。`activated` 是激活状态进入视图时调用;而 `deactivated` 则是在离开活动状态时调用。 下面是一个简单的例子来展示如何在一个子组件中定义并使用这些生命周期方法: ```javascript // ChildComponent.vue 文件内容如下所示 export default { name: 'ChildComponent', beforeCreate() { console.log('child component - beforeCreate'); }, created() { console.log('child component - created'); }, beforeMount() { console.log('child component - beforeMount'); }, mounted() { console.log('child component - mounted'); }, beforeUpdate() { console.log('child component - beforeUpdate'); }, updated() { console.log('child component - updated'); }, activated() { console.log('child component - activated'); }, deactivated() { console.log('child component - deactivated'); }, beforeDestroy() { console.log('child component - beforeDestroy'); }, destroyed() { console.log('child component - destroyed'); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值