一 vue的生命周期如下圖所示(很清晰)
二 vue生命周期的栗子
注意觸發(fā)vue的created事件以后,this便指向vue實例,這點很重要
<!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 () { //在實例創(chuàng)建之后同步調用。此時實例已經結束解析選項,這意味著已建立:數(shù)據(jù)綁定,計算屬性,方法,watcher/事件回調。 //但是還沒有開始 DOM 編譯,$el 還不存在,但是實例存在,即this.a存在,可打印出來 。 console.log("建立"); }, beforeCompile: function () { console.log("未開始編譯"); }, compiled: function () { //在編譯結束后調用。此時所有的指令已生效,因而數(shù)據(jù)的變化將觸發(fā) DOM 更新。但是不擔保 $el 已插入文檔。 console.log("編譯完成"); }, ready: function () { //在編譯結束和 $el 第一次插入文檔之后調用,如在第一次 attached 鉤子之后調用。注意必須是由 Vue 插入(如 vm.$appendTo() 等方法或指令更新)才觸發(fā) ready 鉤子。 console.log("一切準備好了"); }, attached :function () { //myVue.$appendTo(".test2")暫時觸發(fā)不了,不知道怎么解決 //在 vm.$el 插入 DOM 時調用。必須是由指令或實例方法(如 $appendTo())插入,直接操作 vm.$el 不會 觸發(fā)這個鉤子。 console.log("插入DOM成功"); }, detached :function () { //觸發(fā)事件 myVue.$destroy(true),其中參數(shù)true控制是否刪除DOM節(jié)點或者myVue.$remove() //在 vm.$el 從 DOM 中刪除時調用。必須是由指令或實例方法刪除,直接操作 vm.$el 不會 觸發(fā)這個鉤子。 console.log("刪除DOM成功"); }, beforeDestroy: function () { //觸發(fā)方式,在console里面打myVue.$destroy(); //在開始銷毀實例時調用。此時實例仍然有功能。 console.log("銷毀前"); }, destroyed: function () { //觸發(fā)方式,在console里面打myVue.$destroy();其中myVue.$destroy(true)是刪除DOM節(jié)點,會觸發(fā)detached函數(shù),但是實例仍然存在 //在實例被銷毀之后調用。此時所有的綁定和實例的指令已經解綁,注意是解綁不是銷毀,所有的子實例也已經被銷毀。 console.log("已銷毀"); } }); </script> </body></html>
將上面代碼貼入后,在chrome控制臺進行控制,剛開始載入頁面的時候觸發(fā)的事件是:
在控制臺觸發(fā)detached 事件如下(注意DOM已刪除,但是實例仍然存在):
在控制臺觸發(fā)beforeDestroy和destroyed事件如下:(注意destroyed事件觸發(fā)后,是解綁實例,不是刪除實例)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答