Vue 生命周期和数据共享详解

 更新时间:2022年02月22日 15:13:14   作者:pingting_  
这篇文章主要为大家详细介绍了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>
export default {
    data() {
        return {
            message: 'hello son',
            userinfo: {
                name: 'pingting',
                age: 18
            }
        }
    }
}

子组件通过 props 声明自定义属性

<div>
    <h3>Son 组件</h3>
    <p>父组件传过来的 msg: {{ msg}} </p>
    <p>父组件传过来的 user:{{ user}} </p>
</div>
export default {
    props: ['msg' , 'user']
}

2.3 子向父传值

使用自定义事件

子组件通过 $emit 将值传递给父组件

当 click事件触发 => 调用 add 函数 => 触发 numChange 事件 =>

this.count作为实参传递给 getNewCount 函数 => 形参为 val

export default {
    data(){
        return {
            // 子组件的数据
            count: 0
        }
    },
    methods: {
        add(){
            this.count += 1
            // 触发一个自定义事件并且传递参数
            this.$emit('numChange' , this.count)
        }
    }
}

父组件

@ 绑定自定义事件

<Right @numChange="getNewCount"></Right>
export default {
    data() {
        return {
            // 接收 right 传过来的 count
            countFather: 0
        }
    },
    methods: {
      getNewCount(val){
        this.countFather = val
      }
    }
}

2.4 兄弟之间的数据关系

在 vue2.x 使用 eventBus

在这里插入图片描述

创建 eventBus.js 模块,并向外共享一个 Vue 的实例对象

import Vue from 'vue'
export default new Vue()

在数据发送方,调用 bus.$emit('事件名称',发送的数据) 方法触发自定义事件

<button @click="sendStr">发送数据给 Right </button>
import bus from './eventBus.js'
export default {
    data(){
        return {
            str: '这是Son的str数据,将要共享出去'
        }
    },
    methods: {
        sendStr(){
            // 通过 eventBus 发送数据
            bus.$emit('share' , this.str)
        }
    }
}

在数据接收方,调用 bus.$on('事件名称',事件处理函数) 方法注册一个自定义事件

<p>从 Son 接受的数据:{{ strFromSon }} </p>
import bus from './eventBus.js'
export default {
    data(){
        return {
            strFromSon: ''
        }
    },
    created() {
        bus.$on('share' , (val) => {
            this.strFromSon = val
        })
    }
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!  

相关文章

  • vue实现前端按钮组件权限管理

    vue实现前端按钮组件权限管理

    这篇文章主要为大家介绍了vue实现前端按钮组件权限管理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Vue3使用中这些坑你都踩过吗

    Vue3使用中这些坑你都踩过吗

    Vue3 目前已经趋于稳定,不少代码库都已经开始使用它,很多项目未来也必然要迁移至Vue3,本文记录了使用Vue3时遇到的一些问题,希望能对大家有所帮助
    2023-09-09
  • 安装多版本Vue-CLI的实现方法

    安装多版本Vue-CLI的实现方法

    这篇文章主要介绍了安装多版本Vue-CLI的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • vue 组件基础知识总结

    vue 组件基础知识总结

    这篇文章主要介绍了vue 组件基础知识的相关资料,帮助大家更好的理解和使用vue的组件,感兴趣的朋友可以了解下
    2021-01-01
  • vuex如何修改状态state的方法

    vuex如何修改状态state的方法

    这篇文章主要介绍了vuex如何修改状态state的方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 详解vue2 $watch要注意的问题

    详解vue2 $watch要注意的问题

    本篇文章主要介绍了详解vue2 $watch要注意的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • vue3配置代理实现axios请求本地接口返回PG库数据

    vue3配置代理实现axios请求本地接口返回PG库数据

    这篇文章主要为大家详细介绍了vue3配置代理实现axios请求本地接口返回PG库数据的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-03-03
  • Vue验证码60秒倒计时功能简单实例代码

    Vue验证码60秒倒计时功能简单实例代码

    这篇文章主要介绍了Vue验证码60秒倒计时功能简单实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • 如何利用vue+element ui实现好看的登录界面

    如何利用vue+element ui实现好看的登录界面

    最近做了个最基础的ElementUI登录页,适合新手查看,所以下面这篇文章主要给大家介绍了关于如何利用vue+element ui实现好看的登录界面的相关资料,需要的朋友可以参考下
    2022-05-05
  • Vue事件处理原理及过程详解

    Vue事件处理原理及过程详解

    这篇文章主要介绍了vue事件处理原理及过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论