Vue組件與生命周期詳細(xì)講解
寫(xiě)在前面
Vue.js的核心就是以簡(jiǎn)潔的模板語(yǔ)法將數(shù)據(jù)渲染進(jìn)Dom系統(tǒng)。vue實(shí)例在渲染成html的時(shí)候往往要經(jīng)過(guò)以下的步驟:
- 讀取數(shù)據(jù)和方法,設(shè)置數(shù)據(jù)綁定和監(jiān)聽(tīng)
- 解析template
- 將實(shí)例掛載到Dom,并將實(shí)例狀態(tài)和視圖綁定,在執(zhí)行這些步驟的時(shí)候,vue還提供了一些生命周期的方法,用來(lái)在不同的階段對(duì)代碼做增添和修改。
生命周期
- beforeCreate
vue實(shí)例初始化,數(shù)據(jù)監(jiān)聽(tīng)和方法屬性掛載之前調(diào)用
- created
數(shù)據(jù)監(jiān)聽(tīng)和方法屬性掛載之后調(diào)用,是最早可以獲取和操作數(shù)據(jù)及方法的數(shù)據(jù)
- beforeMounted
template解析之后調(diào)用,這個(gè)時(shí)候?qū)嵗€沒(méi)掛載到dom上
- mounted
replace el之后調(diào)用,實(shí)例已經(jīng)掛載到dom上,是最早可以操作dom的時(shí)候
- beforeUpdate
組件中的數(shù)據(jù)發(fā)生變化的時(shí)候執(zhí)行,此時(shí)數(shù)據(jù)已經(jīng)和頁(yè)面保持同步,只是頁(yè)面還沒(méi)更新
- updated
數(shù)據(jù)更新后,頁(yè)面也是最新的
- beforeDestroy
實(shí)例銷毀之前調(diào)用,實(shí)例上的方法和屬性還可以調(diào)用
- destroyed
實(shí)例已經(jīng)銷毀,實(shí)例上的東西已經(jīng)不可以使用
圖解

問(wèn): 什么時(shí)候可以操作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這個(gè)時(shí)候還沒(méi)渲染,無(wú)法被獲取到
mounted階段

mounted階段頁(yè)面已經(jīng)渲染完畢,可以操作所有的dom
總結(jié)
- created階段將數(shù)據(jù)和事件注入,并完成了數(shù)據(jù)觀測(cè),是最早可以獲取和使用data、method的時(shí)候
- beforeMount階段進(jìn)行template的解析和渲染
- mounted階段將實(shí)例注入dom,是最早可以操作dom的時(shí)候
- beforeMount在數(shù)據(jù)發(fā)生變化后執(zhí)行,數(shù)據(jù)已經(jīng)更新
- mounted階段在視圖更新后執(zhí)行,數(shù)據(jù)和頁(yè)面已經(jīng)同步
- beforDestroy在實(shí)例/組件銷毀之前執(zhí)行,還可以使用組件的方法和屬性
- destroyed 實(shí)例銷毀后執(zhí)行,不能再使用實(shí)例
組件的生命周期還有actived和deactived是keep-alive的專屬。
到此這篇關(guān)于Vue組件與生命周期詳細(xì)講解的文章就介紹到這了,更多相關(guān)Vue組件與生命周期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue封裝通過(guò)API調(diào)用的組件的方法詳解
在日常業(yè)務(wù)開(kāi)發(fā)中我們會(huì)經(jīng)常封裝一些業(yè)務(wù)組件,下面這篇文章主要給大家介紹了關(guān)于Vue封裝通過(guò)API調(diào)用的組件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
webpack+vuex+axios 跨域請(qǐng)求數(shù)據(jù)的示例代碼
本篇文章主要介紹了webpack+vuex+axios 跨域請(qǐng)求數(shù)據(jù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路詳解
這篇文章主要給大家介紹了關(guān)于vue-virtual-scroll-list虛擬組件實(shí)現(xiàn)思路的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02
vue.js實(shí)現(xiàn)含搜索的多種復(fù)選框(附源碼)
這篇文章主要給大家介紹了利用vue.js實(shí)現(xiàn)含搜索的多種復(fù)選框的相關(guān)資料,文中給出了簡(jiǎn)單的介紹,但提供了完整的實(shí)例源碼供大家下載學(xué)習(xí),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03
詳談Vue.js框架下main.js,App.vue,page/index.vue之間的區(qū)別
這篇文章主要介紹了詳談Vue.js框架下main.js,App.vue,page/index.vue之間的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
vue單文件組件lint error自動(dòng)fix與styleLint報(bào)錯(cuò)自動(dòng)fix詳解
這篇文章主要給大家介紹了關(guān)于vue單文件組件lint error自動(dòng)fix與styleLint報(bào)錯(cuò)自動(dòng)fix的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
對(duì)vue里函數(shù)的調(diào)用順序介紹
下面小編就為大家分享一篇對(duì)vue里函數(shù)的調(diào)用順序介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
全新打包工具parcel零配置vue開(kāi)發(fā)腳手架
parcel-vue 一個(gè)基于Parcel打包工具的 VueJS急速開(kāi)發(fā)腳手架解決方案,強(qiáng)烈建議使用node8.0以上。下面通過(guò)本文給大家介紹全新打包工具parcel零配置vue開(kāi)發(fā)腳手架的相關(guān)知識(shí),感興趣的朋友一起看看吧2018-01-01

