当前位置: 首页 > news >正文

vue computed 传参_vue生命周期

vue生命周期

简要描述:

  • vue生命周期

vue的生命周期是什么

  • 生命周期钩子是在Vue对象生命周期的某个阶段执行的已定义方法。组件创建、挂载、更新、销毁、的时候触发的一系列的方法 这些方法就叫做生命周期函数。

  • vue每个组件都是独立的,每个组件都有一个属于它的生命周期。

  • 注意:生命周期钩子函数不允许写成箭头函数

详解

生命周期钩子详细
beforeCreate在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
created实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算
beforeMount在挂载开始之前被调用:相关的 render 函数首次被调用
mounted被调用时 vm.$el 也在文档内
beforeUpdate数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
updated由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。
activatedkeep-alive 组件激活时调用。
deactivatedkeep-alive 组件停用时调用。
beforeDestroy实例销毁之前调用。在这一步,实例仍然完全可用。
destroyedVue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

生命周期

1.vue的生命周期是什么 ?

2.vue生命周期的在项目中的执行顺序

3.vue中内置的方法 属性和vue生命周期的运行顺序(data、methods、computed、watch)

4.自己构造的方法与vue生命周期的运行顺序

5.总结

一、vue的生命周期是什么

生命周期钩子是在Vue对象生命周期的某个阶段执行的已定义方法。组件创建、挂载、更新、销毁、的时候触发的一系列的方法 这些方法就叫做生命周期函数。

vue每个组件都是独立的,每个组件都有一个属于它的生命周期。

注意:生命周期钩子函数不允许写成箭头函数

在组件中具体的方法有:

new Vue()

构造函数生成vue 实例

beforeCreate

  1. 组件创建前触发,目的是为了组件的生命周期 和 组件中的事件做准备

  2. 数据没有获得,真实dom也没有渲染出来

  3. 可以进行数据请求,提供了一次数据修改的机会

  4. 执行一次

created

在这个生命阶段,对象及其事件完全初始化,计算属性,事件回调,但dom树并未挂载。

  1. 组件创建结束

  2. 数据得到了,真实dom没有渲染出来

  3. 可以进行数据请求,提供了一次数据修改的机会

  4. 执行了一次

beforeMount

在这个阶段,它检查是否有任何模板可用于要在DOM中呈现的对象。如果没有找到模板,那么它将所定义元素的外部HTML视为模板。

  1. 组件挂载前

  2. 任务:判断el 判断 template
    如果el没有,那么我们需要手动挂载,如果有,那么判断template
    如果template有,那么进行render函数
    如果template没有,那么通过 outerHTML 手动书写模板

  3. 数据可以获得,但是真实dom还没有渲染

  4. 可以进行数据请求,也提供了一次数据修改的机会

  5. 执行一次

mounted

DOM已准备就绪并放置在页面内,一旦模板准备就绪。它将数据放入模板并创建可呈现元素,用这个新的数据填充元素替换DOM元素。这一切都发生在mounted钩子上。

  1. 组件挂载结束

  2. 数据获得了,真实dom也获得了

  3. 可以进行数据请求,也就可以修改数据

  4. 执行了一次

  5. 可以进行真实dom的操作了( 可以进行第三方库的实例化了 )

数据更新

beforeUpdate

在外部事件/用户输入使数据发生更改时,此钩子在DOM元素的更改之前被触发。

  1. 更新前

  2. 重新渲染 DOM , 然后通过算法比较两次vdom,生成patch 补丁对象

  3. 这个钩子函数更多的是内部进行一些操作,我们就不在多干预了

  4. 可以触发多次

updated

  1. 更新结束

  2. 真实dom得到了,数据也得到了( 更新后的 )

  3. 动态数据获取( 第三方库实例化 )

  4. 可以触发多次

beforeDestroy

实例销毁之前调用,在这里还可以访问实例的数据。

//这里可以调用 vm.$destroy();来销毁该对象。

destroyed

组件已销毁 后调用

综上总结:

  1. 数据请求一般写在created里面

  2. 第三方库实例化我们一般会往mounted中写

Vue的销毁有两种形式

  1. 通过开关的形式

  2. 通过调用 $destroy 方法

对比:内部销毁 vs 外部销毁

  外部销毁不仅能销毁组件,也能销毁该组件的dom结构
内部销毁只能销毁组件,不能销毁组件的dom结构

生命周期销毁代码

外部销毁

  <div id="app">
<button @click = "flag = !flag"> 切换 </button>
<Hello v-if = "flag"></Hello>
</div>
<template id="hello">
<div>
hello
</div>
</template>
内部销毁
<div id="app">
<Hello></Hello>
</div>
<template id="hello">
<div class="hello-box">
<button @click = "clear"> 销毁 </button>
hello
</div>
</template>

公共js代码

  Vue.component('Hello',{
template: '#hello',
methods: {
clear () {
this.$destroy()
}
},
mounted () {
this.time = setInterval ( () => {
console.log( '1903' )
},1000)
},
beforeDestroy () {
console.log('beforeDestroy')
clearInterval( this.time )
document.querySelector('.hello-box').remove()
},
destroyed () {
console.log('destroyed')
}
})
new Vue({
el: '#app',
data: {
flag: true
}
})

概要

我们可以使用生命周期钩子在Vue对象的不同阶段添加自定义代码。它将帮助我们控制在DOM中创建对象的流程,以及更新和删除对象。

<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Documenttitle>head><body><div id="app"><button @click="fn">按钮button><p ref="pp">
{{title}}p>div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script><script>let vm = new Vue({
el:"#app",
data:{
title:"123"},
methods:{fn(){this.title = "456"}},//在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。beforeCreate(){//拿不到数据
console.log(this)},created(){//可以拿到数据,拿不到dom节点
console.log(this.title)
console.log(this.$el)//},beforeMount(){
console.log(this.title)},mounted(){//拿到dom节点
console.log(this.$refs.pp)},//当你数据修改的时候会被执行,不会在这两个钩子函数里面修改数据beforeUpdate(){
console.log(this.$refs.pp.innerHTML)},updated(){//如果你去修改数据了,想要完全检测的话只能在updated// console.log(2)
console.log(this.$refs.pp.innerHTML)},beforeDestroy(){
console.log("销毁前")},destroyed(){
console.log("已销毁,结束!")}})// 销毁
vm.$destroy();script>body>html>

vue中内置的方法属性和vue生命周期的运行顺序

data props computed watch methods他们之间的生成顺序是什么呢?

根据翻看vue源码可知:

9739fce20488d6a008fdd7ab6f550ae1.pngprops => methods =>data => computed => watch

自己构造的方法与vue生命周期的运行顺序 如show这些

往往我们在开发项目时都经常用到 $refs 来直接访问子组件的方法,但是这样调用的时候可能会导致数据的延迟滞后的问题,则会出现bug。

解决方法则是推荐采取异步回调的方法,然后传参进去,严格遵守vue的生命周期就可以解决 推荐 es6 的promise。

示例代码:

handleAsync () {
return new Promise(resolve=>{
const res="";
resolve(res)
})
}
async handleShow() {
await this.handleAsync().then(res=>{
this.$refs.child.show(res);
})
}

vm.$destroy();

vm.$destroy();

完全销毁一个实例。清理它与其它实例的连接,解绑它的全部指令及事件监听器。
触发 beforeDestroy 和 destroyed 的钩子。

相关文章:

  • vb.net 循环生成excel的多个sheet_自动生成报告第一弹
  • python从零开始到放弃之二_python从入门到放弃QAQ
  • 安科瑞仪表调试工具_安科瑞ADW系列物联网智能电力仪表——吴玲霞/徐振
  • winform ctrl键单击多选_Ctrl+Shift 组合键用法大全,知道一半以上就是高手!
  • springboot中为何参数拿对象接收总是报错_SpringBoot整合Swagger2
  • sqlconnection对象的open()是否成功_VBA与数据库解决方案第8讲:创建ADO对象,到打开记录集的过程...
  • swing的gui是通过何种模式进行事件响应与监听_一起双网卡服务器被黑引发的勒索事件...
  • mysql上传数据太慢_腾讯云Ubuntu18.04部置Django2系列(四):数据库迁移及导入本地mysql数据...
  • 螺丝上的十字磨没了_螺丝为什么要分为一字和十字螺丝?
  • python3.7 opencv安装_win10 anaconda3(python3.7) 安装 opencv
  • python qt开发保存_【转】python qt(pyqt)的文件打开、文件保存、文件夹选择对话框...
  • 支架预压弹性变形值计算_支架和钢管柱贝雷梁现浇简支箱梁施工,终于找到你!!...
  • python类的成员函数有一个参数_python 面向对象类成员(字段 方法 属性)
  • 四参数坐标转换c++_坐标转换问题
  • python的协程和多线程_Python 全栈:多线程和协程入门练习
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Druid 在有赞的实践
  • emacs初体验
  • ES2017异步函数现已正式可用
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Javascript弹出层-初探
  • Js基础知识(一) - 变量
  • markdown编辑器简评
  • mongo索引构建
  • python大佬养成计划----difflib模块
  • scrapy学习之路4(itemloder的使用)
  • v-if和v-for连用出现的问题
  • Vue2 SSR 的优化之旅
  • yii2权限控制rbac之rule详细讲解
  • 工作中总结前端开发流程--vue项目
  • 警报:线上事故之CountDownLatch的威力
  • 来,膜拜下android roadmap,强大的执行力
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 入手阿里云新服务器的部署NODE
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 译米田引理
  • scrapy中间件源码分析及常用中间件大全
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # C++之functional库用法整理
  • #include
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #单片机(TB6600驱动42步进电机)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (4)(4.6) Triducer
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (NSDate) 时间 (time )比较
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910