组件传参与Vue生命周期

本文介绍了Vue组件间的传参技巧,如props和$emit的使用,以及Vue的八个关键生命周期阶段:创建前后的beforeCreate和created,挂载前后的beforeMount和mounted,更新前后的beforeUpdate和updated,以及销毁前后的beforeDestroy和destroyed。重点讲解了如何在这些阶段进行数据操作和视图更新。

一.组件传参

定义与使用

App.vue
01  导入
import CounterCom from './components/CounterCom.vue'

02 注册
components:{CounterCom}

03 使用
<CounterCom></CounterCom>

父传子

使用props

父传给子的数组是只读的(做默认值,读取显示)不能进行修改

App.vue文件中
<CounterCom :num="10">

CounterCom.vue 组件中
01 接收参数并定义默认值

props:{
    "num":{type:Number,default:1}
}


02 使用参数num

data(){
    return {counter:this.num}
}

子传父

使用的事件 $emit

CounterCom.vue
<button @click="counter++; $emit('counterchange',counter)">

App.vue
<CounterCom @counterchange="n=$event">

$emit(事件名,事件值)  发送一次事件,事件名(counterchange)和事件值(counter) 是自定义的

$event 固定写法,事件的值(counterchange 事件的值,也是子组件$emit的第二个参数)

二.Vue生命周期

Vue生命周期有八个并且分为四类

(🚩为特别声明 ✳ 为重要)

1.创建前后

beforeCreate 创建前
特点:有this,没有data与methods方法

created创建后(✳)
特点:有data,没有$el,dom节点
🚩用处:ajax请求,定时器,事件监听

2.挂载前后

beforeMount 挂载前
特点:有$el ,数据没有渲染

mounted挂载后(✳)
特点:有dom节点,数据也渲染
🚩用处:操作节点,ajax请求

3.更新前后

beforeUpdate更新前
特点: 会执行多次,数据更新,dom节点没有更新

updated 更新完毕
特点: 会执行多次,数据更新,dom节点也更新

4.销毁前后

✳ beforeDestroy 销毁前
特点:数据可以更新,视图已经不更新
🚩用处:移除事件监听,停止定时器

destroyed 销毁完毕
特点:没有this,切换视图与vue实例的联系

### Vue 2 生命周期详解 #### 初始化阶段 在 `new Vue()` 被调用后,Vue 实例进入初始化阶段。此阶段主要完成数据观测 (data observer),属性和方法的代理,事件/计算属性的初始化等工作[^1]。这一阶段的核心目标是准备所有的基础配置,使得后续的操作能够顺利进行。 #### 模板编译阶段 在此阶段,Vue 将模板解析成渲染函数。如果提供了 `template` 属性,则会将其转换为虚拟 DOM 渲染函数;如果没有提供 `template` 或者使用的是单文件组件(`.vue` 文件),则会通过 `.render` 函数来定义如何渲染视图[^4]。这个阶段还涉及指令绑定、插表达式的处理以及一些静态节点标记优化的工作。 #### 挂载阶段 当存在 `el` 参数时,Vue 自动将实例挂载到指定的 DOM 元素上并启动首次渲染流程。如果未设置 `el`,可以通过手动调用 `$mount()` 方法实现动态挂载。在这个过程中,Vue 执行以下操作: - 创建根节点对应的 VNode; - 使用真实 DOM 替换掉占位符或者插入新内容; - 触发一系列与挂载相关的生命周期钩子如 `beforeMount` 和 `mounted`。 #### 更新阶段 每当响应式依赖发生变化时触发重新渲染逻辑,即所谓的“更新”。该阶段的关键在于比较旧VNodes树结构同新的版本之间的差异,并仅针对变动部分作出最小化调整以提高性能效率。涉及到的主要生命周期回调有 `beforeUpdate` 及 `updated`[^3]。 #### 销毁阶段 当一个组件被移除或替换时进入到销毁状态,在这期间它不会再参与任何进一步的数据变化通知机制里去影响其他地方的状态同步情况。具体行为包括清理所有监听器、解绑自定义事件处理器、停止计时器等资源释放动作。相关联的重要钩子函数为 `beforeDestroy` 和 `destroyed`[^2]。 以下是基于上述描述的一个简单示例展示如何利用这些不同周期内的特性: ```javascript // 定义一个简单的 Vue 组件 var vm = new Vue({ el: '#app', data: { message: 'Hello!' }, beforeCreate() { console.log('beforeCreate'); }, // 在实例初始化之后立即调用 created() { console.log('created'); }, // 当实例已经完成了选项的处理、观察者的创建以及其他内部初始化工作后调用 beforeMount() { console.log('beforeMount'); }, // 在挂载开始之前被调用:相关的 render 函数首次被调用。 mounted() { this.timerId = setInterval(() => {this.message += '.';}, 1000); console.log('mounted'); }, // 此处可以访问真实的DOM元素 beforeUpdate() { console.log('beforeUpdate'); },// 数据更新前发生 updated() { console.log('updated'); }, // 响应式数据改变导致界面重绘完成后调用 beforeDestroy() { clearInterval(this.timerId);console.log('beforeDestroy');}, // 即将销毁实例之前的最后一个机会做些事情比如清除定时器 destroyed() { console.log('destroyed'); } // 实例已被完全销毁后的最终状态报告 }); setTimeout(function(){vm.$destroy();},5000); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值