<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 導航守衛 正如其名,vue-router 提供的導航守衛主要用來通過跳轉或取消的方式守衛導航。有多種機會植入路由導航過程中:全局的, 單個路由獨享的, 或者組件級的。 記住**參數或查詢的改變并不會觸發進入/離開的導航守衛**。你可以通過觀察 $route 對象來應對這些變化,或使用 beforeRouteUpdate 的組件內守衛。 <br> ## 完整的導航解析流程 ### 1.導航被觸發 <br> ### 2.在失活的組件里調用離開守衛 beforeRouteLeave 這個離開守衛通常用來禁止用戶在還未保存修改前突然離開。該導航可以通過 next(false) 來取消 ~~~ <script> export default = { beforeRouteLeave (to, from, next) { // 導航離開該組件的對應路由時調用 // 可以訪問組件實例 `this` const answer = window.confirm('Do you really want to leave? you have unsaved changes!') if (answer) { next() } else { next(false) } } } </script> ~~~ <br> ### 3.調用全局的 beforeEach 守衛 當一個導航觸發時,全局前置守衛按照創建順序調用。守衛是異步解析執行,此時導航在所有守衛 resolve 完之前一直處于 等待中。 * 每個守衛方法接收三個參數: * `to: Route`: 即將要進入的目標 路由對象 * `from: Route`: 當前導航正要離開的路由 * `next: Function`: 一定要調用該方法來 resolve 這個鉤子。執行效果依賴 next 方法的調用參數。 * `next()`: 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。 * `next(false)`: 中斷當前的導航。如果瀏覽器的 URL 改變了 (可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。 * `next('/')` 或者 `next({ path: '/' })`: 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。你可以向 next 傳遞任意位置對象,且允許設置諸如 replace: true、name: 'home' 之類的選項以及任何用在 router-link 的 to prop 或 router.push 中的選項。 * `next(error)`: (2.4.0+) 如果傳入 next 的參數是一個 Error 實例,則導航會被終止且該錯誤會被傳遞給 router.onError() 注冊過的回調。 確保要調用 next 方法,否則鉤子就不會被 resolved。 ~~~ const router = new VueRouter({ ... }) router.afterEach((to, from) => { // ... }) ~~~ <br> ### 4.在重用的組件里調用 beforeRouteUpdate 守衛 (2.2+) 在當前路由改變,但是該組件被復用時調用 舉例來說,對于一個帶有動態參數的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候, 由于會渲染同樣的 Foo 組件,因此組件實例會被復用。而這個鉤子就會在這個情況下被調用。 可以訪問組件實例 `this` ~~~ <script> export default = { beforeRouteUpdate (to, from, next) { //... } } </script> ~~~ <br> ### 5.在路由配置里調用 beforeEnter ~~~ new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { // ... } } ] }) ~~~ <br> ### 6.解析異步路由組件 <br> ### 7.在被激活的組件里調用 beforeRouteEnter beforeRouteEnter 守衛 不能 訪問 this,因為守衛在導航確認前被調用,因此即將登場的新組件還沒被創建。 不過,你可以通過傳一個回調給 next來訪問組件實例。在導航被確認的時候執行回調,并且把組件實例作為回調方法的參數。 > 注意 `beforeRouteEnter` 是支持給 `next` 傳遞回調的唯一守衛。對于 `beforeRouteUpdate` 和 `beforeRouteLeave` 來說,`this` 已經可用了,所以不支持傳遞回調,因為沒有必要了。 ~~~ <script> export default = { beforeRouteEnter (to, from, next) { next(vm => { // 通過 `vm` 訪問組件實例 }) } } </script> ~~~ <br> ### 8.調用全局的 beforeResolve 守衛 (2.5+) 這和 router.beforeEach 類似,區別是在導航被確認之前,同時在所有組件內守衛和異步路由組件被解析之后,解析守衛就被調用 ~~~ const router = new VueRouter({ ... }) router.beforeResolve((to, from, next) => { // ... }) ~~~ <br> ### 9.導航被確認 <br> ### 10.調用全局的 afterEach 鉤子你也可以注冊全局后置鉤子,然而和守衛不同的是,這些鉤子不會接受 next 函數也不會改變導航本身 ~~~ const router = new VueRouter({ ... }) router.afterEach((to, from) => { // ... }) ~~~ <br> ### 11.觸發 DOM 更新 <br> ### 12.用創建好的實例調用 beforeRouteEnter 守衛中傳給 next 的回調函數
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看