首页 > 其他分享 >vue生命周期(钩子函数)

vue生命周期(钩子函数)

时间:2023-04-11 10:44:09浏览次数:35  
标签:el 生命周期 console log 状态 钩子 vue data name

目录

介绍

Vue实例有一个完整的生命周期,也就是从开始创建初女台化数据、编译模板、挂载DOM、渲染一更新一渲染、卸载等一系列过程,我们称这是Vue的生命周期。

image

生命周期: vue实例从创建到销毁的过程。

生命周期钩子: 就是生命周期事件的别名而已

钩子函数 描述
创建期间的生命周期函数
beforeCreate 创建Vue实例之前调用,实例刚在内存中被创建出来,此时,还没有初始化好data 和 methods 属性
created 创建Vue实例成功后调用(可以在此处发送异步请求后端数据),也就是实例已经完成了模板的编译,但是还没有挂载到页面中
beforeMount 渲染DOM之前调用,此时已经完成了模板的翻译,但是还有完全挂载到页面中
mounted 创建Vue实例之前调用,实例刚在内存中被创建出来,此时,还没有初始化好data 和 methods 属性
运行期间的生命周期函数
beforeUpdate 重新渲染之前调用(数据更新等操作时,控制DOM重新渲染),也就是状态更新之前执行此函数,此时 data 中的状态值是最新的,但是界面上显示的数据还是旧的,因为此时还没有开始重新渲染DOM节点
updated 重新渲染完成之后调用,也就是实例更新完毕之后调用次函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了
销毁期间的生命周期函数
beforeDestroy 实例销毁之前调用,在这一步,实例仍然完全可用
当执行 beforeDestroy 钩子函数的时候,Vue实例就已经从运行阶段进入到了销毁阶段;当执行 beforeDestroy 的时候,实例身上所有的 data 和所有的 methods, 以及 过滤器、指令、、 都处于可用状态,此时,还没有真正执行销毁的过程
destroyed Vue 实例销毁后调用。调用后,vue 实例 指示的所有东西都会解绑,所有的事件监听器会被移除,所有的子实例也会被销毁
> # 代码验证
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

</head>
<body>
<div id="app">
    {{name}},{{platform}}
</div>
</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            name: '123',
            platform: '321',
        },
        methods: {},
        beforeCreate() {
            console.group('当前状态, beforeCreate')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        }
        ,
        created() {
            console.group('当前状态, created')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        },
        beforeMount() {
            console.group('当前状态, beforeMount')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        },
        mounted() {
            console.group('当前状态, mounted')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        },
        beforeUpdate() {
            console.group('当前状态, beforeUpdate')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        },
        updated() {
            console.group('当前状态, updated')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        },
        beforeDestroy() {
            console.group('当前状态, beforeDestroy')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        },
        destroyed() {
            console.group('当前状态, destroyed')
            console.log('当前el状态', this.$el)
            console.log('当前data状态', this.$data)
            console.log('当前name状态', this.name)
        }
    })
</script>
</body>
</html>

image

因为beforeDestroy与destoryed状态是关闭后才出现的,所以在这里看不到,可以使用组件的形式进行展示,比如使用了v-if的标签,在定义为false后,组件会被销毁掉,这时就会触发destroy类型的函数。
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <button @click="btnFunc">点我隐藏</button>
    <mycomp v-if="show"></mycomp>
</div>
<script>
    Vue.component(
        'mycomp',
        {
            template: `
              <div>
              {{test}}
              </div>
            `,
            data() {
                return {
                    test: '测试destory钩子函数',
                }
            },
            methods: {},
            beforeCreate() {
                console.group('当前状态, beforeCreate')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            },
            created() {
                console.group('当前状态, created')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            },
            beforeMount() {
                console.group('当前状态, beforeMount')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            },
            mounted() {
                console.group('当前状态, mounted')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            },
            beforeUpdate() {
                console.group('当前状态, beforeUpdate')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            },
            updated() {
                console.group('当前状态, updated')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            },
            beforeDestroy() {
                console.group('当前状态, beforeDestroy')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            },
            destroyed() {
                console.group('当前状态, destroyed')
                console.log('当前el状态', this.$el)
                console.log('当前data状态', this.$data)
                console.log('当前name状态', this.name)
            }
        })
    var vm = new Vue({
        el: '#app',
        data: {
            name: '123',
            platform: '321',
            show: false
        },
        methods: {
            btnFunc() {
                this.show =! this.show
            }
        },
    })
</script>
</body>
</html>

image

标签:el,生命周期,console,log,状态,钩子,vue,data,name
From: https://www.cnblogs.com/smyz/p/17303153.html

相关文章

  • ZR.Admin小改和VUE3版本体验
    前言孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说:“对呀,对呀!......回字有四样写法,你知道么?”大家好,我是44岁的大龄程序员码农阿峰。阿峰从事编程二十年了,虽然没有成为架构师,却也用过很多种架构。几年前开始研究JAVA企业级快速开发框架若依,后来发现了它的.net版本......
  • 使用vue3创建后台管理项目
    最后案例:    一:创建一个Vue应用打开控制台:npminitvue@latest输入你需要创建的项目名称,一路回车   下载需要的包,如下:"dependencies":{"@element-plus/icons-vue":"^2.1.0","axios":"^1.3.5","element-plus"......
  • 在vue中为vuecal组件中的一个按钮添加点击事件
    现在需要为一个按钮添加点击事件由于vuecal文档中没有该按钮的点击事件,所以考虑使用原生dom为其添加点击事件使用原生dom添加使用this.$nextTick+.onclickthis.$nextTick(()=>{ //获取对应的dom元素 varotest=document.getElementsByClassName("vuecal__arrowvueca......
  • vue2源码-二、对象响应式原理
    //循环对象进行一次劫持classObserver{constructor(value){this.walk()}walk(data){//重新定义属性Object.keys(data).forEach((key)=>defineReactive(data,key, data[key]))}}//属性劫持//对对象target,定义属性key,值为value//使用Object.definProperty重......
  • spring中bean的生命周期
    背景bean在创建过程中会出现各种各样的循环依赖。了解spring如何用三级缓存机制解决循环依赖,解决spring没有解决的循环依赖。所以需要了解bean的生命周期原理。出现属性的循环依赖时,bean的生命周期spring用三级缓存机制来解决属性的循环依赖。以UserService和OrderService......
  • vue iview table实现动态自定义表头
    一、前言众所周知,iview中有一个表格组件Table,用于展示多条结构类似的数据。之前遇到过一个需求,要手动控制table的表头显示。就是假如table表格一共有10列数据,可以通过设置勾选,决定显示多少列二、代码为了代码的复用性,将配置页面单独抽成了组件,所以代码中会有组件之间传值父组件......
  • Vue启用报错 RangeError: Invalid typed array length: -4095
    近期开发的前端项目项目启用失败,记录下修复过程RangeError:Invalidtypedarraylength:-4095 错误原因:node版本问题,安装10.x.x即可重新安装:1.将原来的nvm,node卸载2.安装nvm 如果显示上面内容即安装成功3.在nvm上安装一个版本的Node   命令:nvmls出现下图......
  • vue实现路由懒加载(异步加载)及组件懒加载(异步加载)的方式
    转自:槐序之夏:https://blog.csdn.net/qq_42403643/article/details/129264032一、为什么要使用路由懒加载为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题。二、定义懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载。三、使用常用的懒加......
  • 关于vue2老项目的打包优化,实现首屏加载速度提升
    分析项目代码体积yarnaddwebpack-bundle-analyzer在webpack.dev.conf.js中配置constBundleAnalyzerPlugin=require('webpack-bundle-analyzer').BundleAnalyzerPluginplugins:[newBundleAnalyzerPlugin(),//代码体积分析插件......]执行yarnrundev或......
  • vue3中的自定义指令
    1.适用到自定义指令的场景 防抖、图片懒加载、一键Copy的功能、拖拽、页面水印、权限校验、输入框自动聚焦、相对时间转换、下拉菜单2.个人需求:在后台系统中,有很多表单提交组件,其中很多限制数字且限制条件不同。最初使用oninput="value=value.replace(/[^\d]/g,'')"来显示......