Vue組件與生命周期詳細講解
寫在前面
Vue.js的核心就是以簡潔的模板語法將數(shù)據渲染進Dom系統(tǒng)。vue實例在渲染成html的時候往往要經過以下的步驟:
- 讀取數(shù)據和方法,設置數(shù)據綁定和監(jiān)聽
- 解析template
- 將實例掛載到Dom,并將實例狀態(tài)和視圖綁定,在執(zhí)行這些步驟的時候,vue還提供了一些生命周期的方法,用來在不同的階段對代碼做增添和修改。
生命周期
- beforeCreate
vue實例初始化,數(shù)據監(jiān)聽和方法屬性掛載之前調用
- created
數(shù)據監(jiān)聽和方法屬性掛載之后調用,是最早可以獲取和操作數(shù)據及方法的數(shù)據
- beforeMounted
template解析之后調用,這個時候實例還沒掛載到dom上
- mounted
replace el之后調用,實例已經掛載到dom上,是最早可以操作dom的時候
- beforeUpdate
組件中的數(shù)據發(fā)生變化的時候執(zhí)行,此時數(shù)據已經和頁面保持同步,只是頁面還沒更新
- updated
數(shù)據更新后,頁面也是最新的
- beforeDestroy
實例銷毀之前調用,實例上的方法和屬性還可以調用
- destroyed
實例已經銷毀,實例上的東西已經不可以使用
圖解
問: 什么時候可以操作dom?
outer html(直接渲染在根節(jié)點下面的)在beforcreate階段就可以操作,使用template渲染的要在mounted階段才可以操作
<div id='app'> <span id='span1'> 直接渲染的文字 </span> <span id='span2'> {{message}} <span> <com id='span3'></com> </div> <script> function deepClone(obj){ return obj && JSON.parse(JSON.stringify(obj)); }; </script> <script> function test(stage) { var span1 = document.getElementById('span1'); var span2 = document.getElementById('span2'); var span3 = document.getElementById('span3'); debugger; }; Vue.component('com', { template: '<span>使用template渲染的文字</span>' }); var vm = new Vue({ el:'#app', data: { message: 'hello vue!' }, beforeCreate() { test('beforeCreate'); }, created() { test('created'); }, beforeMount() { test('beforeMount'); }, mounted() { test('mounted'); } }); </script>
beforeCreate階段、created階段、beforeMount階段
可以操作outer html但獲取不到data中的數(shù)據,template這個時候還沒渲染,無法被獲取到
mounted階段
mounted階段頁面已經渲染完畢,可以操作所有的dom
總結
- created階段將數(shù)據和事件注入,并完成了數(shù)據觀測,是最早可以獲取和使用data、method的時候
- beforeMount階段進行template的解析和渲染
- mounted階段將實例注入dom,是最早可以操作dom的時候
- beforeMount在數(shù)據發(fā)生變化后執(zhí)行,數(shù)據已經更新
- mounted階段在視圖更新后執(zhí)行,數(shù)據和頁面已經同步
- beforDestroy在實例/組件銷毀之前執(zhí)行,還可以使用組件的方法和屬性
- destroyed 實例銷毀后執(zhí)行,不能再使用實例
組件的生命周期還有actived和deactived是keep-alive的專屬。
到此這篇關于Vue組件與生命周期詳細講解的文章就介紹到這了,更多相關Vue組件與生命周期內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
webpack+vuex+axios 跨域請求數(shù)據的示例代碼
本篇文章主要介紹了webpack+vuex+axios 跨域請求數(shù)據,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03vue-virtual-scroll-list虛擬組件實現(xiàn)思路詳解
這篇文章主要給大家介紹了關于vue-virtual-scroll-list虛擬組件實現(xiàn)思路的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2023-02-02詳談Vue.js框架下main.js,App.vue,page/index.vue之間的區(qū)別
這篇文章主要介紹了詳談Vue.js框架下main.js,App.vue,page/index.vue之間的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08vue單文件組件lint error自動fix與styleLint報錯自動fix詳解
這篇文章主要給大家介紹了關于vue單文件組件lint error自動fix與styleLint報錯自動fix的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-01-01