vue js 的生命週期和鉤子函式
阿新 • • 發佈:2018-11-27
用Vue框架,熟悉它的生命週期可以讓開發更好的進行。
首先先看看官網的圖,詳細的給出了vue的生命週期:
簡單理解為 它可以總共分為8個階段:
beforeCreate(建立前),
created(建立後),
beforeMount(載入前),
mounted(載入後),
beforeUpdate(更新前),
updated(更新後),
beforeDestroy(銷燬前),
destroyed(銷燬後)
讓我們舉個粒子吧
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue生命週期</title> <script src="../js/vue.js"></script> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> </head> <body> <div class="test" style="border: 1px black dashed;padding: 8px;"> {{a}} </div> <div class="test2" style="border: 1px red solid;margin-top: 10px;padding: 8px;"> 我是內容二 </div> <script type="text/javascript"> var myVue = new Vue({ el: ".test", data: { a: "我是內容,在控制檯輸入myVue.a=123456,可以改變我的值" }, created: function () { //在例項建立之後同步呼叫。此時例項已經結束解析選項,這意味著已建立:資料繫結,計算屬性,方法,watcher/事件回撥。 //但是還沒有開始 DOM 編譯,$el 還不存在,但是例項存在,即this.a存在,可打印出來 。 console.log("建立"); }, beforeCompile: function () { console.log("未開始編譯"); }, compiled: function () { //在編譯結束後呼叫。此時所有的指令已生效,因而資料的變化將觸發 DOM 更新。但是不擔保 $el 已插入文件。 console.log("編譯完成"); }, ready: function () { //在編譯結束和 $el 第一次插入文件之後呼叫,如在第一次 attached 鉤子之後呼叫。注意必須是由 Vue 插入(如 vm.$appendTo() 等方法或指令更新)才觸發 ready 鉤子。 console.log("一切準備好了"); }, attached :function () { //myVue.$appendTo(".test2")暫時觸發不了,不知道怎麼解決 //在 vm.$el 插入 DOM 時呼叫。必須是由指令或例項方法(如 $appendTo())插入,直接操作 vm.$el 不會 觸發這個鉤子。 console.log("插入DOM成功"); }, detached :function () { //觸發事件 myVue.$destroy(true),其中引數true控制是否刪除DOM節點或者myVue.$remove() //在 vm.$el 從 DOM 中刪除時呼叫。必須是由指令或例項方法刪除,直接操作 vm.$el 不會 觸發這個鉤子。 console.log("刪除DOM成功"); }, beforeDestroy: function () { //觸發方式,在console裡面打myVue.$destroy(); //在開始銷燬例項時呼叫。此時例項仍然有功能。 console.log("銷燬前"); }, destroyed: function () { //觸發方式,在console裡面打myVue.$destroy();其中myVue.$destroy(true)是刪除DOM節點,會觸發detached函式,但是例項仍然存在 //在例項被銷燬之後呼叫。此時所有的繫結和例項的指令已經解綁,注意是解綁不是銷燬,所有的子例項也已經被銷燬。 console.log("已銷燬"); } }); </script> </body> </html>