# 切換控制流水線
為更好的理解路由切換的管道,假設我們一個啟用了路由的應用,此應用在路徑 `/a/b/c` 時渲染了三個嵌套的 `<router-view>` :

接著,用戶瀏覽新路徑 `/a/d/e` ,導致需要更新,渲染一個新的組建樹:

如何做到這些呢?這個過程包含一些我們必須要做的工作:
1. 可以重用組件 A ,因為重新渲染后,組件 A 依然保持不變。
2. 需要停用并移除組件 B 和 C 。
3. 啟用并激活組件 D 和 E 。
4. 在執行步驟2和3之前,需要確保切換效果有效 - 也就是說,為保證切換中涉及的所有組件都**能**按照期望的那樣被停用/激活。
使用 vue-router ,你可以控制通過實現切換鉤子函數來控制這些步驟。但是在了解如何做的細節之前,我們先了解一下大局。
### 切換的各個階段
我們可以把路由切換分為三個階段:
1. **可重用階段:**
檢查當前的視圖結構中是否存在可以重用的組件。這是通過對比兩個新的組件樹,找出共用的組件,然后檢查它們的可重用性(通過 `canReuse` 選項)。默認情況下, 所有組件都是可重用的,除非是定制過。

2. **驗證階段:**
檢查當前的組件是否能夠停用以及新組件是否可以被激活。這是通過調用路由配置階段的 `canDeactivate` 和 `canActivate` 鉤子函數來判斷的。

注意,`canDeactivate` 按照從下至上的冒泡順序檢查,而 `canActivate` 則是從上之下。
任何一個鉤子函數都可以終止界面切換。如果在驗證階段終止了界面切換,路由器會保持當前的應用狀態,恢復到前一個路徑。
3. **激活階段:**
一旦所有的驗證鉤子函數都被調用而且沒有終止切換,切換就可以認定是合法的。路由器則開始禁用當前組件并啟用新組件。

此階段對應鉤子函數的調用順序和驗證階段相同,其目的是在組件切換真正執行之前提供一個進行清理和準備的機會。界面的更新會等到所有受影響組件的 `deactivate` 和 `activate` 鉤子函數執行之后才進行。
`data` 這個鉤子函數會在 `activate` 之后被調用,或者當前組件組件可以重用時也會被調用。
接下來我們會談論一下切換過程中各個鉤子函數的細節。
- vue
- 官方教程
- 起步
- 安裝
- 概述
- Vue 實例
- Class 與 Style 綁定
- 數據綁定語法
- 條件渲染
- 列表渲染
- 表單控件綁定
- 組件
- 計算屬性
- 自定義指令
- 自定義過濾器
- 方法與事件處理器
- 混合
- 插件
- 過渡
- 深入響應式原理
- 對比其它框架
- 構建大型應用
- API
- vue-router
- 安裝
- 基本用法
- 嵌套路由
- 路由對象和路由匹配
- 具名路徑
- 路由配置項
- router-view
- v-link
- 切換控制流水線
- 切換鉤子函數
- data
- activate
- deactivate
- canActivate
- canDeactivate
- canReuse
- API
- 路由實例屬性
- router.start
- router.stop
- router.map
- router.on
- router.go
- router.replace
- router.redirect
- router.alias
- router.beforeEach
- router.afterEach
- 文章
- VUE.JS: A (RE)INTRODUCTION
- 源碼
- 表單控件綁定