Vue組件與生命周期詳細(xì)講解
寫在前面
Vue.js的核心就是以簡潔的模板語法將數(shù)據(jù)渲染進(jìn)Dom系統(tǒng)。vue實例在渲染成html的時候往往要經(jīng)過以下的步驟:
- 讀取數(shù)據(jù)和方法,設(shè)置數(shù)據(jù)綁定和監(jiān)聽
- 解析template
- 將實例掛載到Dom,并將實例狀態(tài)和視圖綁定,在執(zhí)行這些步驟的時候,vue還提供了一些生命周期的方法,用來在不同的階段對代碼做增添和修改。
生命周期
- beforeCreate
vue實例初始化,數(shù)據(jù)監(jiān)聽和方法屬性掛載之前調(diào)用
- created
數(shù)據(jù)監(jiān)聽和方法屬性掛載之后調(diào)用,是最早可以獲取和操作數(shù)據(jù)及方法的數(shù)據(jù)
- beforeMounted
template解析之后調(diào)用,這個時候?qū)嵗€沒掛載到dom上
- mounted
replace el之后調(diào)用,實例已經(jīng)掛載到dom上,是最早可以操作dom的時候
- beforeUpdate
組件中的數(shù)據(jù)發(fā)生變化的時候執(zhí)行,此時數(shù)據(jù)已經(jīng)和頁面保持同步,只是頁面還沒更新
- updated
數(shù)據(jù)更新后,頁面也是最新的
- beforeDestroy
實例銷毀之前調(diào)用,實例上的方法和屬性還可以調(diào)用
- destroyed
實例已經(jīng)銷毀,實例上的東西已經(jīng)不可以使用
圖解
問: 什么時候可以操作dom?
outer html(直接渲染在根節(jié)點(diǎn)下面的)在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ù)據(jù),template這個時候還沒渲染,無法被獲取到
mounted階段
mounted階段頁面已經(jīng)渲染完畢,可以操作所有的dom
總結(jié)
- created階段將數(shù)據(jù)和事件注入,并完成了數(shù)據(jù)觀測,是最早可以獲取和使用data、method的時候
- beforeMount階段進(jìn)行template的解析和渲染
- mounted階段將實例注入dom,是最早可以操作dom的時候
- beforeMount在數(shù)據(jù)發(fā)生變化后執(zhí)行,數(shù)據(jù)已經(jīng)更新
- mounted階段在視圖更新后執(zhí)行,數(shù)據(jù)和頁面已經(jīng)同步
- beforDestroy在實例/組件銷毀之前執(zhí)行,還可以使用組件的方法和屬性
- destroyed 實例銷毀后執(zhí)行,不能再使用實例
組件的生命周期還有actived和deactived是keep-alive的專屬。
到此這篇關(guān)于Vue組件與生命周期詳細(xì)講解的文章就介紹到這了,更多相關(guān)Vue組件與生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
webpack+vuex+axios 跨域請求數(shù)據(jù)的示例代碼
本篇文章主要介紹了webpack+vuex+axios 跨域請求數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03vue-virtual-scroll-list虛擬組件實現(xiàn)思路詳解
這篇文章主要給大家介紹了關(guān)于vue-virtual-scroll-list虛擬組件實現(xiàn)思路的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-02-02vue.js實現(xiàn)含搜索的多種復(fù)選框(附源碼)
這篇文章主要給大家介紹了利用vue.js實現(xiàn)含搜索的多種復(fù)選框的相關(guān)資料,文中給出了簡單的介紹,但提供了完整的實例源碼供大家下載學(xué)習(xí),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03詳談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詳解
這篇文章主要給大家介紹了關(guān)于vue單文件組件lint error自動fix與styleLint報錯自動fix的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01