Vue組件與生命周期詳細講解
寫在前面
Vue.js的核心就是以簡潔的模板語法將數(shù)據(jù)渲染進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é)點下面的)在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階段進行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組件與生命周期詳細講解的文章就介紹到這了,更多相關(guān)Vue組件與生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
webpack+vuex+axios 跨域請求數(shù)據(jù)的示例代碼
本篇文章主要介紹了webpack+vuex+axios 跨域請求數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
vue-virtual-scroll-list虛擬組件實現(xiàn)思路詳解
這篇文章主要給大家介紹了關(guān)于vue-virtual-scroll-list虛擬組件實現(xiàn)思路的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-02-02
vue.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-08
vue單文件組件lint error自動fix與styleLint報錯自動fix詳解
這篇文章主要給大家介紹了關(guān)于vue單文件組件lint error自動fix與styleLint報錯自動fix的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01

