vue生命周期

<!DOCTYPE html>
<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>Document</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/animate.css/3.5.2/animate.min.css">
<link rel="stylesheet" href="./swiper.min.css">
</head>
<body>
<div id="app">
  <my-component></my-component>
</div>

<template id="component">
    <div>
        <h1 id="title">{{message}}</h1>
        <h3>Number: {{num}}</h3>
        <p><button @click = "destroy">destroy</button></p>
        <input type="text" v-model = "message">
    </div>
</template>


<script src="./base/vue.js"></script>

<script>
// 组件从创建初始到销毁的过程中,经常会需要在某些时刻去执行一些逻辑代码
// Vue在每个组件的生命周期过程(从创建到销毁)中暴露出很多的 钩子函数,这些钩子函数都会在特定的时刻执行

// 1. 组件或者实例会在这个生命周期过程中会经历哪些阶段?这些阶段中组件或者实例都做了些什么?

// 2. 生命周期钩子函数有哪些?分别在哪些时刻执行?有什么作用?

// 组件或者实例生命周期会经历三个阶段: 初始化/运行中/销毁

// 1. 当组件或者Vue被实例化的时候,代表组件或者Vue的生命周期开始

// 2. 初始化事件监听和生命周期


  Vue.component('my-component', {
      template: '#component',
      data () { return { message: 'Hello World', num: 1 } },
      methods: {
          destroy () {
              this.$destroy()
          }
      },
      beforeCreate () {
          // 3. 执行beforeCreate, 此时数据还未挂载, dom也没有渲染, 基本没有什么作用
          console.log('beforeCreate', this.message, document.querySelector('#title'))
      },
      // 4. 挂载数据,绑定数据监听等...
      created () {
          // 5. 执行created, dom没有渲染,可以操作数据,并且不会触发运行中阶段的钩子函数,经常会在这里做数据的初始化挂载
          console.log('created', this.message, document.querySelector('#title'))
          this.message += '!'
      },
      // 6. 查找组件或者实例的模板,进行编译,编译成虚拟dom结构放入到render函数中
      beforeMount () {
          // 执行beforeMount 也可以访问数据,操作数据,dom还没有渲染,作用和created一样,做初始数据的获取与挂载
        console.log('beforeMount', this.message, document.querySelector('#title'))
        this.message += '!'
    },
      // 7. 创建$el,并且执行了render函数
      // render () {
      //     console.log('render')
      // },
      mounted () {
          // 8. 执行mounted dom重新渲染完成,标志 初始化阶段完成
          console.log('mounted', this.message, document.querySelector('#title'))
          document.querySelector('#title').style.color = "red"
          document.querySelector('#title').onclick = function () {
              console.log('hahahahha')
          }
          // this.message += '!' // 会触发update函数执行

          this.timer = setInterval(() => {
              console.log('go')
              this.num ++
          }, 500)
      },
    
      // 9. 进入运行中阶段,当数据更改的时候
      beforeUpdate () {
          // 10. 执行beforeUpdate, 数据已经更新了,dom还没有重新渲染, 没有什么用,不能操作数据(死循环),dom也没有操作的必要
          console.log('beforeUpdate', this.message, document.querySelector('#title').innerHTML)
          // this.message += '!'
      },
      // 11. setter => watcher -> 创建新的虚拟dom -> diff对比 -> rerender
    updated () {
          // 12.执行updated dom重新渲染完成, 作用,可以操作重新渲染之后的dom
          console.log('updated', this.message, document.querySelector('#title').innerHTML)
      },
      // 13当组件被销毁的时候,销毁组件只有一个途径:调用组件的$destory方法,切换组件其实也在销毁组件
      beforeDestroy () {
          // 14. 执行beforeDestroy, 此时还没有销毁,善后.....取消一些事件监听,解绑某些dom的事件
          console.log('beforeDestroy', this.message, document.querySelector('#title'))
          clearInterval(this.timer)
          document.querySelector('#title').onclick = null
      },
      // 15. 取消所有的监听!数据监听/事件监听。。。。
      destroyed () {
          // 16. 执行destroyed 作用和beforeDestroy一样
          console.log('destroyed', this.message, document.querySelector('#title'))
      }
  })




  //只有影响渲染的数据改变,才会用到运行中的update函数,不影响渲染的数据是不会的。


  new Vue().$mount('#app')



</script>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容