0


Vue 生命周期和数据共享

Vue 生命周期和数据共享

1. 组件的生命周期

1.1 生命周期与生命周期函数

  • 生命周期是指一个组件从 创建 => 运行 => 销毁 的整个时间段,强调的是一个时间段
  • 生命周期函数是由 vue 框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行

1.2 组件生命周期函数的分类

在这里插入图片描述

1.3 生命周期图示以及详解

官网图示:生命周期图示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

组件创建阶段

  • beforeCreted props/data/methods … 都未被创建,啥也干不了
  • created- props/data/methods … 都创建好了- 经常在此函数里调用 methods 中的方法,请求服务器中的数据。- 并且把请求到的数据转存在 data 中,提供 template 模板渲染的时候使用。- 但是模板结构尚未生成,不能访问 DOM 结构,DOM 结构均为 null
  • beforeMount将要把内存中编译好的 HTML 结构渲染到浏览器中
  • mounted- 已经把内存中的 HTML 结构成功的渲染到了浏览器中- 此时浏览器中已经包含了当前组件的 DOM 结构- 这也是最早可以操作 DOM 的时候

组件运行阶段

  • beforeUpdata- 将要根据变化过最新的数据重新渲染组件的模板结构- data是最新ui结构中的内容还是旧的
  • updataed- 已经根据最新的数据完成了组件的 DOM 结构的重新渲染- 最新的 data新的 ui结构- 当数据变化之后,操作最新的 DOM 结构

组件销毁阶段

beforeDestory

将要销毁这个组件,此时尚未销毁组件还处于正常工作的状态

destoryed

组件已经完全被销毁,此时组件在浏览器中对应的 DOM 结构已经完全移除

2. 组件之间的数据共享

2.1 组件之间的关系

在项目的开发中,组件之间的最常见的关系分为如下两种:

  • 父子关系
  • 兄弟关系

2.2 父向子传值

使用自定义属性

  • 简单类型复制复杂类型是传的引用
  • 不要修改 props 的值
  • 父组件通过 v-bind 绑定数值<Son:msg="message":user="userinfo"></Son>``````exportdefault{data(){return{ message:'hello son', userinfo:{ name:'pingting', age:18}}}}
  • 子组件通过 props 声明自定义属性<div><h3>Son 组件</h3><p>父组件传过来的 msg: {{ msg}} </p><p>父组件传过来的 user:{{ user}} </p></div>``````exportdefault{ props:['msg','user']}

2.3 子向父传值

使用自定义事件

  • 子组件通过 $emit 将值传递给父组件当 click事件触发 => 调用 add 函数 => 触发 numChange 事件 =>this.count作为实参传递给 getNewCount 函数 => 形参为 valexportdefault{data(){return{// 子组件的数据 count:0}}, methods:{add(){this.count +=1// 触发一个自定义事件并且传递参数this.$emit('numChange',this.count)}}}
  • 父组件@ 绑定自定义事件<Right@numChange="getNewCount"></Right>``````exportdefault{data(){return{// 接收 right 传过来的 count countFather:0}}, methods:{getNewCount(val){this.countFather = val }}}

2.4 兄弟之间的数据关系

vue2.x 使用 eventBus
在这里插入图片描述

  • 创建 eventBus.js 模块,并向外共享一个 Vue 的实例对象import Vue from'vue'exportdefaultnewVue()
  • 在数据发送方,调用 bus.$emit('事件名称',发送的数据) 方法触发自定义事件<button@click="sendStr">发送数据给 Right </button>``````import bus from'./eventBus.js'exportdefault{data(){return{ str:'这是Son的str数据,将要共享出去'}}, methods:{sendStr(){// 通过 eventBus 发送数据 bus.$emit('share',this.str)}}}
  • 在数据接收方,调用 bus.$on('事件名称',事件处理函数) 方法注册一个自定义事件<p>从 Son 接受的数据:{{ strFromSon }} </p>``````import bus from'./eventBus.js'exportdefault{data(){return{ strFromSon:''}},created(){ bus.$on('share',(val)=>{this.strFromSon = val })}}
标签: vue.js 前端

本文转载自: https://blog.csdn.net/pingting_/article/details/123048299
版权归原作者 pingting_ 所有, 如有侵权,请联系我们删除。

“Vue 生命周期和数据共享”的评论:

还没有评论