• 生命周期的使用


    第一节: 初始化

      1.  beforeCreate

    初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。

    vue实例中的el,data,data中的message都为undefined。

      1.  created

    实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

    主要应用:调用数据,调用方法,调用异步函数

      1.  beforeMount

    载入前(完成了data和el数据初始化),可是页面中的内容仍是vue中的占位符,data中的message信息没有被挂在到Bom节点中,在这里能够在渲染前最后一次更改数据的机会,不会触发其余的钩子函数,通常能够在这里作初始数据。这个阶段操作DOM是不奏效的。

      1.  mounted

    载入后html已经渲染(ajax请求能够放在这个函数中),把vue实例中的data里的message挂载到BOM节点中去。

    第二节: 更新状态

    2.1 beforeUpdate

    状态完成更新之前(data中数据已发生变化,view层数据变化之前),后vue的虚拟dom机制会从新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比以后从新渲染。

    2.1 updated

    数据已经更改完成,dom也从新render完成。

    第三节: 销毁实例

    Vm.$destroy():销毁后自定义事件会失效,但原生DOM事件依然有效。销毁后会调用下面两个钩子。

    2.1 beforeDestroy

    销毁前执行($destroy方法被调用的时候就会执行),通常在这里善后:清除计时器、清除非指令绑定的事件等等…’)。

    2.2 destroyed

    销毁后 (Dom元素存在,只是再也不受vue控制),卸载watcher,事件监听,子组件

    第四节: 生命周期总结

    常用的生命周期钩子:

    1. mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。

          2.beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

    关于销毁Vue实例:

    1.销毁后借助Vue开发者工具看不到任何信息。

    2.销毁后自定义事件会失效,但原生DOM事件依然有效。

    3.一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。

    1. <html lang="en">
    2. <head>
    3. <meta charset="UTF-8">
    4. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>Documenttitle>
    7. <script src="../js/vue.js">script>
    8. head>
    9. <body>
    10. <div id="root">
    11. 计算器:{{num}}
    12. <br>
    13. <span>{{num2}}span>
    14. <button @click="add">点我+1button>
    15. div>
    16. <script>
    17. new Vue({
    18. el: "#root",
    19. data: {
    20. num: 0,
    21. num2:100,
    22. },
    23. methods: {
    24. add() {
    25. setInterval(() => {
    26. this.num++;
    27. }, 1000)
    28. }
    29. },
    30. // data,event事件调用之前调用,此时的data还未初始化
    31. // 创建之前 初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
    32. // vue实例中的el,data,data中的message都为undefined。
    33. beforeCreate() {
    34. console.log("beforecreate", this.num);
    35. },
    36. // 实例已经创建,data,event都已经准备好,但是挂载还没未开始页面不显示
    37. // 创建完成 实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),
    38. // 属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
    39. // 主要应用:调用数据,调用方法,调用异步函数
    40. created() {
    41. console.log("created", this.num);
    42. },
    43. // 挂载 页面完成挂载后调用此钩子 载入后html已经渲染(ajax请求能够放在这个函数中),
    44. // 把vue实例中的data里的message挂载到BOM节点中去。
    45. mounted() {
    46. console.log("mounted", this.num);
    47. setInterval(() => {
    48. this.num++;
    49. }, 1000)
    50. },
    51. // 状态完成更新之前(data中数据已发生变化,view层数据变化之前),后vue的虚拟dom机制会从新构建虚拟dom
    52. // 与上一次的虚拟dom树利用diff算法进行对比以后从新渲染。
    53. beforeUpdate() {
    54. console.log("beforUpdate", this.num);
    55. },
    56. // 数据已经更改完成,dom也从新render完成。
    57. updated() {
    58. console.log("updataed", this.num);
    59. },
    60. beforeDestroy() {
    61. console.log("beforeDestroy", this.num);
    62. },
    63. destroyed() {
    64. console.log('destroyed')
    65. },
    66. })
    67. script>
    68. body>
    69. html>

  • 相关阅读:
    搭建自己的以图搜图系统(二):深入优化搭建生产级别的图搜系统
    SpringCloud - Spring Cloud Netflix 之 Zuul网关;路由(十一)
    『忘了再学』Shell基础 — 16、位置参数变量
    Ruby网络爬虫教程:从入门到精通下载图片
    大一学生Web课程设计 美食主题网页制作(HTML+CSS+JavaScript)
    深度学习_18_模型的下载与读取
    深入理解计算机系统:运行helloworld程序发生了什么?
    Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
    openjudge 1.5.24 正常血压
    java 高级面试题(借鉴)(上)
  • 原文地址:https://blog.csdn.net/m0_59359854/article/details/126268732