vuejs生命周期函数

生命周期函数就是vue实例在某一个时间点会自动执行的函数

当我们创建一个实例的时候,也就是我们调用 new Vue() 这句话的时候,vue会帮助我们去创建一个实例,创建过程其实并不像我们想的那么简单,他要经过很多的步骤

Init(Events & Lifecycle):首先他会去初始化事件和生命周期相关的内容,当最基础的初始化完成的时候,在这个时间点上,vue会自动的帮我去之行一个函数,这个函数就是beforeCreate

beforeCreate:既然beforeCreate被自动之行,那么beforeCreate就是一个生命周期函数

var vm = new Vue({
  el:‘#app‘,
  beforeCreate:function(){
    console.log(‘before create‘)
  }
})

我们发现这个在控制台被自动输出了,就是vue自动执行了beforeCreate这个函数,处理完这个函数,vue会继续调用一个写外部的注入,包括双向绑定的相关内容

Init(injections & reactivity): 外部的注射,各种绑定的初始化,这部分初始化完成的时候,基本上vue实例的初始化操作都完成了,在这个结点上,又会有一个自动的函数被执行,这个函数的名字叫created

created:这也是一个生命周期函数,因为他完全符合生命周期函数的定义

var vm = new Vue({
  el:‘#app‘,
  beforeCreate:function(){
    console.log(‘before create‘)
  },
  created:function(){
    console.log(‘created‘)
  }
})

可以看到beforeCreate执行之后,created也被自动的执行了,继续看这张图

Has ‘el‘ options:是否有el这个选项

Has ‘template‘ optioins: 是否有template这个属性

  no->Compile el‘s outerHtml as template: 如果实例里面没有tempalte这个属性,会把外部el挂载点的html当作模板

  yes->Compile template into render functoin: 如果实例里面有tempalte,这个时候就会用template去渲染

但是有了模板之后并没有直接渲染到页面上,在渲染之前,又自动到去执行了一个函数,这个函数是beforeMount

beforeMount:这个函数也是一个生命周期函数,也就是模板即将挂载到页面到一瞬间,beforeMount会被执行

var vm = new Vue({
  el:‘#app‘,
  template:‘<h1>hello</h1>‘,
  beforeCreate:function(){
    console.log(‘before create‘)
  },
  created:function(){
    console.log(‘created‘)
  },
  beforeMount:function(){
    console.log(‘before mount‘)
  }
})

可以看到beforeMount被执行了,在beforeMount执行完成后

Create vm.$el and replace ‘el‘ width it: 模板结合数据会被挂载到页面上,当dom挂载到页面之上,这个时候又有一个生命周期函数被执行了

mounted:在beforeMount dom并没有渲染到页面上,在mounted dom已经被渲染到页面上了,这个时候可以做个实验

<div id=‘app‘>
  hello world  
</div>

<script>
  var vm = new Vue({
    el:‘#app‘,
    template:‘<h1>hello</h1>‘,
    beforeCreate:function(){
      console.log(‘before create‘)
    },
    created:function(){
      console.log(‘created‘)
    },
    beforeMount:function(){
      console.log(this.$el);
      console.log(‘before mount‘)
    },
    mounted:function(){
      console.log(this.$el);
      console.log(‘mounted‘)
    }
  })
</script>

看到在beforeMount输出当dom是<div id=‘app‘>hello world</div>,,在mounted输出的dom是<h1>hello</h1>这也印证了上面这张图的内容,在beforeMount的时候页面还没有被渲染,在mounted的时候页面已经被渲染完毕了

beforeDestroy,destroyed:

var vm = new Vue({
  el:‘#app‘,  
  template:‘<h1>hello</h1>‘,
  beforeCreate:function(){
    console.log(‘before create‘)
  },
  created:function(){
    console.log(‘created‘)
  },
  beforeMount:function(){
    console.log(this.$el);
    console.log(‘before mount‘)
  },
  mounted:function(){
    console.log(this.$el);
    console.log(‘mounted‘)
  },
  beforeDestroy:function(){
    console.log(‘beforeDestroy‘)
  },
  destroyed:function(){
    console.log(‘destroyed‘)
  }
})

刷新页面完毕,这个时候会发现beforeDestroy,destroyed并没有被触发,那什么时候被触发呢

when vm.$destroy() is called:当destroy()这个方法被调用的时候会调用beforeDestroy,当全部销毁的时候,destroyed会被执行,那怎么让他执行呢,在控制台执行vm.$destroy()的时候会调用这两个函数,还没被销毁之前会调用beforeDestroy,已经被销毁后会调用destroyed这个函数

这张图上还有两个生命周期函数,叫做beforeUpdate和updated,这两个生命周期函数在什么时候执行呢

beforeUpdate,updated:

var vm = new Vue({
  el:‘#app‘,
  template:‘<h1>hello</h1>‘,
  beforeCreate:function(){
    console.log(‘before create‘)
  },
  created:function(){
    console.log(‘created‘)
  },
  beforeMount:function(){
    console.log(this.$el);
    console.log(‘before mount‘)
  },
  mounted:function(){
    console.log(this.$el);
    console.log(‘mounted‘)
  },
  beforeDestroy:function(){
    console.log(‘beforeDestroy‘)
  },
  destroyed:function(){
    console.log(‘destroyed‘)
  },
  beforeUpdate:function(){
    console.log(‘before updated‘)
  },
  updated:function(){
    console.log(‘updated‘)
  }
})

刷新页面看,发现这两个钩子函数其实并没有被执行,那为什么没有被执行呢,看图解释说是,when data changes,当数据发生改变的时候才会被执行

beforeUpdate:数据发生改变,还没有被渲染之前,beforeUpdate会被执行

updated:当数据重新渲染之后,updated这个生命周期函数会被执行

教程里面只有8个生命周期函数,实际上有11个生命周期函数

原文地址:https://www.cnblogs.com/wzndkj/p/9612647.html

时间: 2024-07-31 16:02:37

vuejs生命周期函数的相关文章

ionic中的生命周期函数

//ionic中的生命周期函数 onPageLoaded(){ //page初始化时 console.log("page 1 : page loaded"); } //在这里可以做页面初始化的一些事情 onPageWillEnter(){ //page即将进入时 console.log("page 1 : page will enter"); } onPageDidEnter(){ //page进入后 console.log("page 1 : page

为什么Activity生命周期函数是运行在UI线程

这是我自己给自己提的问题,或者说是Activity的生命周期函数是怎样运行在主线程的?下面简单分析一下,讨论的问题其实远远不止于这个问题.会涉及到进程的启动,Binder的线程池,ActivityThread中的消息处理. 进程开启 我们最开始接触Android的时候,都知道主线程和非主线程区别,我们可以用Handler来将代码运行在主线程中.而主线程是如何开启的呢?在ActivityThread当中有个公有静态main方法,每次ActivityManagerService请求Zygote进程f

Cocos2d-x场景生命周期函数介绍

层(Layer)的生命周期函数有例如以下: init().初始化层调用. onEnter().进入层时候调用. onEnterTransitionDidFinish().进入层并且过渡动画结束时候调用. onExit().退出层时候调用. onExitTransitionDidStart(). 退出层并且開始过渡动画时候调用. cleanup(). 层对象被清除时候调用. 提示  层(Layer)继承于节点(Node),这些生命周期函数根本上是从Node继承而来.其实全部Node对象(包含:场景

Fragment中生命周期函数的介绍

1)第一次启动:onCreate->onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onResume 2)按下返回键:onPause->onPause->onStop->onStop->onDestroyView->onDestroy->onDetach->onDestroy 恢复时:因为按下返回键直接销毁了,所以恢复的时候会从

Activity生命周期函数、onSaveInstanceState()和onRestoreInstanceState()的介绍

本文涉及了Activity中的 onSaveInstanceState() 和 onRestoreInstanceState()方法,需要注意的他们并不是生命周期方法.我放在这是为了整合起来讲解. 一.生命周期中的方法调用时机 本文转自:http://blog.csdn.net/android_tutor/article/details/5772285 1) 首次执行时执行:onCreate()->onStart()->onResume() 2) 部分可见(被对话框等遮挡)时执行:onPaus

从Android到IOS,IOS应用生命周期函数

由于对于自己的C基础还算满意,花了一个月断断续续的把OC看完了,最近在看一些IOS开发的知识.初次创建一个IOS项目,xCode会自动生成这些文件与目录 从头开始,应用首次执行会先从main函数开始执行. int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 看到源码中

React 学习(四) ---- 生命周期函数

现在我们能修改状态,页面可以进行交互了,但是还有一种状态改变没有解决,那就是倒计时效果,时间一直在变化,组件状态也一直在改变,但我们什么都没有做,如果要实现这样的效果,需要怎么处理? 我们都知道,改变状态用的是setState,  上次讲的加减操作是在把它写到事件处理函数中来改变状态的,但现在没有什么事件供我们调用,因为我们没有做任何操作,它却一直在变化,现在要做的就是找一个机会或入口,来写setState 函数, 这个机会就是组件的生命周期函数. 生命周期也是来源于对我们对现实生活的思考, 对

Vue的生命周期函数

Vue的生命周期函数通常分为以下三类: ①实例创建时的生命周期函数:②实例执行时的生命周期的函数:③实例销毁时的生命周期的函数. 代码与注释详解: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-wi

react 的生命周期函数

生命周期函数: 是指在某一时刻组件自动执行 的函数 初始化: 设置props和state mounting: componentWillMount 在组件即将被挂载到页面的时候自动执行 render 组件在页面上进行挂载 componentDidMount 在组件被挂载到页面的时候后自动执行 updation:组件更新 props =>componentWillPeceiveProps=>shouldComponentUpdate=> componentWillUpdate=>re