---
# System prepended metadata

title: Vue.js 生命周期跑的顺序
tags: [Vue]

---

# Vue.js 生命周期跑的顺序

完整生命週期
參考:https://ithelp.ithome.com.tw/articles/10214921

在页面首次加载执行顺序有如下：

beforeCreate                //在实例初始化之后、创建之前执行
created                         //实例创建后执行
beforeMounted             //在挂载开始之前调用
filters      //挂载前加载过滤器
computed                     //计算属性
directives-bind              //只调用一次，在指令第一次绑定到元素时调用
directives-inserted        //被绑定元素插入父节点时调用
activated                       //keek-alive组件被激活时调用，则在keep-alive包裹的嵌套的子组件中触发
mounted     //挂载完成后调用

---
修改页面input时，被自动调用的选项顺序如下：
watch                           //首先先监听到了改变事件
filters     //过滤器没有添加在该input元素上，但是也被调用了
beforeUpdate              //数据更新时调用，发生在虚拟dom打补丁前
directived-update        //指令所在的组件的vNode更新时调用，但可能发生在其子vNode更新前
directives-componentUpdated//指令所在的组件的vNode及其子组件的vNode全部更新后调用
updated                      //组件dom已经更新

---
组件销毁时，执行顺序如下
beforeDestroy            //实例销毁之前调用
directives-unbind       //指令与元素解绑时调用，只调用一次
deactivated                //keep-alive组件停用时调用
destroyed                  //实例销毁之后调用

---

全部的生命週期掛鉤依序如下 (請參照清單下的圖)：
beforeCreate：實體初始化。
Created：實體建立完成。資料 $data 已可取得，但 $el 屬性還未被建立。
beforeMount：執行元素掛載之前。
mounted：元素已掛載， $el 被建立。
beforeUpdate：當資料變化時被呼叫，還不會描繪 View。
updated：DOM 的更新已經完成，View 被顯示在畫面上。
activated：如果有設定 keep-alive，這個掛鉤會被呼叫。
deactivated：停用 keep-alive時被呼叫。
beforeDestroy：實體還可使用。
destroyed：實體銷毀。所有綁定被解除、事件偵聽被移除、子實體也被銷毀。
![](https://i.imgur.com/qSeYcnk.png)
