生命周期.png

常用的生命周期钩子:

  1. mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。
  2. beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

关于销毁Vue实例

  1. 销毁后借助Vue开发者工具看不到任何信息。
  2. 销毁后自定义事件会失效,但原生DOM事件依然有效。
  3. 一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。

    代码解析

    1. <body>
    2. <div id="app">
    3. <h1 :class="redBG">{{msg}}</h1>
    4. <hello-com v-if='isShow'></hello-com>
    5. </div>
    6. <script>
    7. let helloCom = Vue.component('hello-com', {
    8. template: '<h1>{{msg}}</h1>',
    9. data: function() {
    10. return {
    11. msg: 'AAA'
    12. }
    13. },
    14. beforeDestroy() {
    15. //应用销毁之前
    16. //此时还能访问到实例的组件和方法
    17. console.log('beforeDestroy')
    18. console.log(this.msg) //AAA
    19. },
    20. destroyed() {
    21. //应用销毁之后
    22. //此时还能访问到实例的组件和方法
    23. //不要在这里操作数据和方法
    24. console.log('destroyed')
    25. console.log(this.msg)
    26. }
    27. })
    28. let app = new Vue({
    29. el: "#app",
    30. data: {
    31. msg: "Hellow",
    32. redBG: "redBG",
    33. isShow: true //控制组件销毁
    34. },
    35. methods: {
    36. clickEvent() {}
    37. },
    38. comments: {
    39. 'hello-com': helloCom
    40. },
    41. beforeCreate() {
    42. //Vue实例刚被创建 数据/事件都还没更新
    43. console.log(this) //Vue
    44. console.log(this.msg) //undefined
    45. console.log(this.clickEvent) //undefined
    46. },
    47. created() {
    48. //数据data和方法methods绑定到应用对象app上(还未渲染到视图)
    49. console.log(this.msg) //Hellow
    50. console.log(this.clickEvent) //fun
    51. },
    52. beforeMount() {
    53. //渲染之前,根据数据生成Dom
    54. let dom = document.querySelector(".redBG")
    55. console.log(dom) //null
    56. },
    57. mounted() {
    58. //渲染之后,可以获取数据生成的Dom对象
    59. let dom = document.querySelector(".redBG")
    60. console.log(dom) // </h1>
    61. },
    62. beforeUpdate() {
    63. //数据更改但内容未更改
    64. let dom = document.querySelector(".redBG")
    65. console.log(dom.innerHTML)
    66. },
    67. updated() {
    68. //内容更改完毕
    69. let dom = document.querySelector(".redBG")
    70. console.log(dom.innerHTML)
    71. }
    72. })
    73. </script>
    74. </body>