首页 > 其他分享 >【6.0】Vue之生命周期函数

【6.0】Vue之生命周期函数

时间:2023-08-06 22:33:47浏览次数:29  
标签:Vue console 实例 DOM 钩子 周期函数 调用 6.0

【一】Vue的生命周期

【1】详解

  • Vue.js生命周期是指在Vue实例从创建到销毁的过程中,会经历一系列的钩子函数,这些钩子函数可以让我们在不同的阶段插入自定义的代码。
  • Vue的生命周期分为三个主要阶段:
    • 创建阶段
    • 更新阶段
    • 销毁阶段

(1)创建阶段

  • beforeCreate:
    • 在实例初始化之后,数据观测和事件配置之前被调用。
    • 在这个阶段,Vue实例的属性和方法尚未初始化。
  • created:
    • 在实例创建完成后被立即调用。
    • 在这个阶段,Vue实例已经初始化,并且可以访问到data属性和methods方法。

(2)更新阶段

  • beforeMount:
    • 在挂载开始之前被调用。在这个阶段,模板编译已完成,但尚未将组件挂载到DOM中。
  • mounted:
    • 在挂载完成后被调用。
    • 在这个阶段,组件已经被挂载到DOM中,可以操作DOM元素。

(3)更新阶段

  • beforeUpdate:
    • 在组件更新之前被调用。
    • 在这个阶段,组件的数据已经被修改,但DOM尚未更新。
  • updated:
    • 在组件更新完成后被调用。
    • 在这个阶段,组件的数据已经更新,并且DOM也已经重新渲染。

(4)销毁阶段

  • beforeDestroy:

    • 在实例销毁之前被调用。
    • 在这个阶段,实例仍然可以访问data和methods,但已经无法访问到DOM元素。
  • destroyed:

    • 在实例销毁后被调用。
    • 在这个阶段,实例已经被销毁,所有的事件监听和观察者都已被移除。
  • 通过这些生命周期钩子函数,我们可以在不同的阶段执行一些特定的操作,例如初始化数据、发送请求、添加事件监听器等。

  • 这样可以更好地控制Vue实例的行为,并与外部环境进行交互。

【2】小结

  • new Vue()

    • 创建出来
  • 页面关闭

    • 被销毁掉
  • 这整个过程经历了一个周期

  • Vue 提供了一些钩子函数[写了就会执行,不写就不会被执行]

    • 到某个阶段,就会触发某个函数的执行
  • 8个生命周期钩子函数

    • beforeCreate
      • 创建Vue实例之前调用
    • created
      • 创建Vue实例成功后调用
    • beforeMount
      • 渲染DOM之前调用
    • mounted
      • 渲染DOM之后调用
    • beforeUpdate
      • 重新渲染之前调用(数据更新等操作时,控制DOM重新渲染)
    • updated
      • 重新渲染完成之后调用
    • beforeDestroy
      • 销毁之前调用
    • destroyed
      • 销毁之后调用
  • 8个声明周期钩子,什么情况会用到

    • created:
      • 用的最多,变量初始化完成了(data中得数据),在这里,我们发送ajax请求
    • beforeDestroy:
      • 组件销毁之前会执行
        • 组件创建,就执行一个定时任务[每隔1s,打印一个helloworld]
        • 组件销毁,定时任务要销毁,如果定时任务不销毁,会一直执行

(1)beforeCreate

  • 生命周期钩子函数beforeCreate在创建Vue实例之前调用。
  • 这时候Vue实例还没有初始化完成,通常在这个阶段我们可以进行一些初始化工作,比如配置项的处理、全局事件的处理等。

例如:

// Vue实例化之前的代码执行
new Vue({
  beforeCreate() {
    console.log('beforeCreate钩子函数被调用');
  },
  //...
});

(2)created

  • 生命周期钩子函数created在创建Vue实例成功后调用。
  • 在这个阶段,Vue实例已经完成了数据绑定、计算属性等操作,但是DOM还没有被挂载,可以在这个阶段进行一些初始化操作。

例如:

// Vue实例化之后的代码执行
new Vue({
  created() {
    console.log('created钩子函数被调用');
    // 可以在这里进行数据请求等异步操作
  },
  //...
});

(3)beforeMount

  • 生命周期钩子函数beforeMount在渲染DOM之前调用。
  • 在这个阶段,Vue实例已经完成了数据绑定和编译模板,但还没有将其挂载到真实的DOM上,可以在这个阶段进行一些DOM操作的准备工作。

例如:

new Vue({
  beforeMount() {
    console.log('beforeMount钩子函数被调用');
    // 可以在这里进行DOM操作的准备工作
  },
  //...
});

(4)mounted

  • 生命周期钩子函数mounted在渲染DOM之后调用。
  • 在这个阶段,Vue实例已经将模板编译成了真实的DOM,并挂载到了页面上,可以在这个阶段进行一些需要操作DOM的任务。

例如:

new Vue({
  mounted() {
    console.log('mounted钩子函数被调用');
    // 可以在这里操作DOM
  },
  //...
});

(5)beforeUpdate

  • 生命周期钩子函数beforeUpdate在重新渲染之前调用。
  • 在数据更新时,Vue会比较数据变化,然后重新渲染相应的DOM。在这个阶段,可以进行一些更新前的操作。

例如:

new Vue({
  beforeUpdate() {
    console.log('beforeUpdate钩子函数被调用');
    // 可以在这里进行DOM操作或其他数据更新前的操作
  },
  //...
});

(6)updated

  • 生命周期钩子函数updated在重新渲染完成之后调用。
  • 在这个阶段,DOM已经被更新完毕,并且是同步的。可以进行一些更新后的DOM操作。

例如:

new Vue({
  updated() {
    console.log('updated钩子函数被调用');
    // 可以在这里进行DOM操作或其他数据更新后的操作
  },
  //...
});

(7)beforeDestroy

  • 生命周期钩子函数beforeDestroy在Vue实例销毁之前调用。
  • 在这个阶段,Vue实例还完好无损,可以进行一些销毁前的清理工作,如清除定时器、解绑事件等。

例如:

new Vue({
  beforeDestroy() {
    console.log('beforeDestroy钩子函数被调用');
    // 可以在这里进行清理工作
  },
  //...
});

(8)destroyed

  • 生命周期钩子函数destroyed在Vue实例销毁之后调用。
  • 在这个阶段,Vue实例已经被销毁,此时无法继续访问实例的方法和属性。

例如:

new Vue({
  destroyed() {
    console.log('destroyed钩子函数被调用');
    // 可以在这里进行一些销毁后的清理工作
  },
  //...
});

【3】案例演示

  • 全局组件,生命周期
<body>
<div id="app">
    <h1>生命周期钩子</h1>
    <input type="text" v-model="username"> ------> {{username}}
    <h1>使用全局组件</h1>
    <button @click="hideModel">显示全局组件</button>
    <child v-if="show"></child>
</div>


</body>

<script>
    // 定义一个全局组件,组件有自己的html/css/js/事件....
    // `` 模版字符串,es6中的语法
    // 在组件中,data必须是函数,返回对象
    Vue.component('child', {
        template: `
            <div>
                <button @click="back">后退</button>
                <button>{{index_home}}</button>
                <button @click="forword">前进</button>
            </div>
            `,
        data() {
            return {
                index_home: '首页',
            }
        },
        methods: {
            back() {
                console.log('后退成功')
            },
            forword() {
                console.log('前进成功')
            },
        },
        // 生命周期函数
        beforeCreate() {
            console.log('beforeCreate钩子函数被调用');
        },
        created() {
            console.log('created钩子函数被调用');
            // 可以在这里进行数据请求等异步操作
            // 启动一个定时器
            this.t = setInterval(() => {
                console.log('hello world')
            }, 1000)
        },
        beforeMount() {
            console.log('beforeMount钩子函数被调用');
            // 可以在这里进行DOM操作的准备工作
        },
        mounted() {
            console.log('mounted钩子函数被调用');
            // 可以在这里操作DOM
        },
        beforeUpdate() {
            console.log('beforeUpdate钩子函数被调用');
            // 可以在这里进行DOM操作或其他数据更新前的操作
        },
        updated() {
            console.log('updated钩子函数被调用');
            // 可以在这里进行DOM操作或其他数据更新后的操作
        },
        beforeDestroy() {
            console.log('beforeDestroy钩子函数被调用');
            // 可以在这里进行清理工作
            // 销毁定时器
            clearInterval(this.t)
            this.t = null
        },
        destroyed() {
            console.log('destroyed钩子函数被调用');
            // 可以在这里进行一些销毁后的清理工作
        },
    })

    var vm = new Vue({
            el: '#app',
            data: {
                username: '',
                show: false,

            },
            methods: {
                hideModel() {
                    this.show = !this.show
                },
            },
        }
    )
</script>

标签:Vue,console,实例,DOM,钩子,周期函数,调用,6.0
From: https://www.cnblogs.com/dream-ze/p/17610251.html

相关文章

  • 【5.0】Vue之计算属性和监听属性
    【一】计算属性[1]计算属性是通过依赖变量进行缓存的,这意味着计算属性会保存最近一次计算的结果,并且只有在相关的依赖变量发生改变时才会重新计算。[2]计算属性只有在其相关依赖变量发生改变时才会重新求值,这也是它与普通函数的一个主要区别。与函数不同的是,计算属性只在......
  • vue表格分页以及增删改查的实际应用
    效果:1:表格以及分页2:增加一条数据3:删除一条数据4:修改一条数据5:查询一条数据<template><divclass="tab-container"><divclass="filter-container"style="margin-bottom:20px"><el-inputmaxlength="40&quo......
  • vue--day55--vue 的$nextTick以及MyItem编辑框
    1.语法this.$nextTick(回调函数)2.作用在下一次DOM更新结束后执行其指定的回调3.什么时间用当改变数据后,要基于更新后新的DOM进行某些操作时,要在nextTick所指定的回调函数中执行。1.App.vue<template><divid="root"><divclass="todo-container"><divclass="to......
  • Vue学习笔记:路由开发 Part 02
    在上一篇中,默认情况下浏览器控制台会提示 [VueRouterwarn]:Nomatchfoundforlocationwithpath"/"这是因为没有定义path为/的情况导致的。在实际使用中,可以将/通过路由进行绑定,也可以通过重定向,进行跳转。路由重定向为/,通过redirect进行重定向import{createRouter,crea......
  • Ubuntu16.04 离线安装网卡驱动
    安装好Ubuntu系统后,搜索不到WIFI的问题的可能解决方案 解决方案大多数人都是下载ubuntu-16.04-desktop-amd64.iso这种iso包用u盘安装的Ubuntu16.04,咱们把iso包解压打开,按照这个路径找到目标文件,将目标文件铐入U盘中:ubuntu-16.04-desktop-amd64->pool->restricted->b->......
  • [Vue warn]: Property or method "todoName" is not defined on the instance but ref
    错误原因先上报错截图报错翻译:解决办法首先需要保证初始化属性时该属性是被动的,两种情况是在数据选项中,是一些基于类的组件。在vue的template中使用了该属性,但是在data或者methods中还并没有被定义,就被使用了,造成了这个错误。在data中定义一下这个数据或者在met......
  • vue 开源项目 安装脚手架报错问题 ERESOLVE unable to resolve dependency tree
       在安装项目依赖时,很大可能会遇到安装不成功的问题,其中有一个很大的原因,可能就是因为你的npm版本导致的 使用--force或--legacy-peer-deps可解决这种情况。--force会无视冲突,并强制获取远端npm库资源,当有资源冲突时覆盖掉原先的版本。--legacy-peer-deps标志是在v7......
  • 前端学习笔记202306学习笔记第四十七天-vue-强制缓存1
        ......
  • 前端学习笔记202304学习笔记第十九天-vue3.0-vue2的项目中创建路由2
      ......
  • Vue3中如何自定义指令具体如何使用
    在Vue3中,自定义指令使用的语法与Vue2略有不同。具体步骤如下:在定义组件的选项中使用directives属性定义自定义指令。constapp=Vue.createApp({directives:{//定义指令myDirective(el,binding){//操作DOMel.textContent=binding.value.toUpper......