本文經過console.log
的一些特性,結合vue.js
的源碼,經過一個簡單的例子,讓你瞭解Vue
的各個過程的變化.
控制檯輸出的效果圖javascript
請用chrome查看,並打開控制檯看效果
演示地址
vue-console.html
的建立下載vue.js
文件,在vue-console.html
中引入,我寫了一個簡單的例子,涵蓋:初始化視圖->點擊後更新視圖(包括各個鉤子函數)
代碼以下:css
<script src="./vue.js"></script> <div id="app"> <div id="hi" @click="changeName">{{name}}</div> </div> </div> <script> var style = 'font-size: 20px;color: blue' var vm = new Vue({ el:'#app', data() { return { name: '點我', } }, beforeCreate () { console.log('%cI am beforeCreate------ 我在選項裏寫的', style) }, created () { console.log('%cI am created------ 我在選項裏寫的', style) }, beforeMount () { console.log('%cI am beforeMount------ 我在選項裏寫的', style) }, mounted () { console.log('%cI am mounted------ 我在選項裏寫的', style) }, beforeUpdate () { console.log('%cI am beforeUpdate------ 我在選項裏寫的',style) }, updated () { console.log('%cI am updated------ 我在選項裏寫的', style) }, methods: { changeName () { // 點擊是文本發生變化 this.name = 'jike' } } }) </script>
var tagLeftStyle = [ 'color: #fff', 'border-top-left-radius:3px', 'border-bottom-left-radius:3px', 'background-color: #564b4f', 'padding: 5px' ].join(';') var tagRightStyle = function (color) { color = color?color:'#0BCF1B' return [ 'color: #fff', 'border-top-right-radius:3px', 'border-bottom-right-radius:3px', `background-color: ${color}`, 'padding: 5px' ].join(';') } // ... // 一些樣式省略,具體能夠去看源碼 var tagVariable = function (obj, tag, desc, num, detail, color) { console.log(`%c${lineNo} %o%c<---%c${tag}%c${desc} %c源碼${num}行 %c說明: %o`, noStyle, obj, arrowStyle ,tagLeftStyle, tagRightStyle(color), sourceNoStyle, detailStyle, detail) lineNo++ } // %c表明後面的文本,使用css樣式,%o表明對象輸出
上面的代碼只要調用tagVariable(...)
傳遞參數,就實現上圖的標籤效果,
還能夠console.log
顯示圖片,加了一下講解圖方便理解;html
經過調用上面封裝的函數在vue.js
某些時刻調用,就達到很好的效果vue
我將整個過程分爲四個階段: 構造函數階段
、初始化階段
、掛載階段
、更新階段
,
會以上面提到的例子貫穿的java
日常咱們使用Vue
,都是用new Vue({})
,其實就是調用它的構造函數建立實例,以下圖node
會對咱們傳入data
、methods
等處理,便於後面階段的調用及一些功能的實現
如例子的data
的name
會被代理到vm
實例上,因此咱們能夠用this.name
調用git
data() { return { name: '點我', } }
<div id="app"> <div id="hi" @click="changeName">{{name}}</div> </div>
會將上面的html
渲染成視圖(這裏麪包括渲染函數,虛擬dom的實現等)github
點擊頁面上的文本時發生更新,這個過程包括:wathcer
的觸發、patch
算法對比新舊vnode
,更新dom
算法
具體的能夠去看源碼,在github上,以爲能夠的話幫忙star一下chrome
參考文章: Vue技術內幕
Vue.js 源碼解析